首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 2D 文字旋轉特效實現

     編輯:Java 相關知識

Java 2D API 提供強大的幾何變換能力,通過 Graphics2D 的 translate()、rotate()、scale() 等方法可輕鬆實現文字旋轉、縮放、平移等視覺特效。本文演示以面板中心為原點,將文字環狀旋轉繪製 12 次的完整示例。

效果預覽

文字旋轉特效

核心原理

  1. 平移原點:translate(width/2, height/2) 將繪圖原點移至面板中心
  2. 循環旋轉繪製:每次旋轉 30°(π/6),繪製一次文字,共 12 次構成圓環
  3. 顏色交替:奇偶次數使用不同顏色增強視覺層次

完整源代碼

package java2d;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Rotate {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Java 2D 文字旋轉");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.getContentPane().add(new RotatePanel());
        jf.setPreferredSize(new Dimension(500, 400));
        jf.pack();
        jf.setLocationRelativeTo(null); // 居中顯示
        jf.setVisible(true);
    }
}

class RotatePanel extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        
        // 背景填充
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, getWidth(), getHeight());
        
        String text = "Java 2D 旋轉";
        Font font = new Font("宋體", Font.BOLD, 16);
        Color[] colors = { Color.ORANGE, Color.LIGHT_GRAY };
        
        g2d.setFont(font);
        
        // 核心:平移原點到面板中心
        g2d.translate(getWidth() / 2, getHeight() / 2);
        
        // 旋轉繪製 12 次,每次 30 度
        for (int i = 0; i < 12; i++) {
            g2d.rotate(Math.PI / 6); // 30° = π/6 弧度
            g2d.setPaint(colors[i % 2]);
            g2d.drawString(text, 0, 0); // 在當前旋轉座標系原點繪製
        }
    }
}

關鍵 API 解析

方法作用參數說明
translate(tx, ty)平移原點tx, ty:x/y 軸平移距離
rotate(theta)繞原點旋轉座標系theta:弧度(順時針為正)
rotate(theta, x, y)繞指定點旋轉x, y:旋轉中心點
scale(sx, sy)縮放座標系sx, sy:x/y 軸縮放比例
setPaint(paint)設置繪製顏色/漸變/紋理Color 實現 Paint 接口

進階變體:繞文字中心旋轉

默認 drawString(text, 0, 0) 以文字基線左邊為原點。若需文字自轉(繞自身中心),需計算文字寬高並調整繪製位置:

FontMetrics fm = g2d.getFontMetrics();
int textWidth = fm.stringWidth(text);
int textHeight = fm.getHeight();

// 在旋轉前調整:將文字中心對齊座標系原點
g2d.drawString(text, -textWidth/2, textHeight/4);

動畫版本思路

若需持續旋轉動畫,可在 paintComponent 外部維護角度變量,配合 Timer 定時 repaint():

private double angle = 0;
private Timer timer = new Timer(50, e -> {
    angle += Math.PI / 18; // 每幀 +10°
    repaint();
});

// paintComponent 中:
g2d.rotate(angle);
// 繪製邏輯...

座標系變換順序影響

順序很重要! 典型順序:translate → rotate → scale → draw

  • 先平移再旋轉 = 繞新原點旋轉
  • 先旋轉再平移 = 繞舊原點旋轉後再位移
  • 縮放會影響後續平移距離

Java 2D 的仿射變換機制強大且直觀,掌握 Graphics2D 座標系變換組合,可實現豐富的圖形動畫與視覺特效。本例展示了最基礎的旋轉應用,擴展方向包括:多層嵌套變換、漸變填充、圖片旋轉縮放、複雜路徑構建等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved