import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import java.awt.geom.Point2D; import java.awt.geom.Point2D.Float; import java.awt.geom.Rectangle2D; import javax.swing.JComponent; import javax.swing.JFrame; public class GradientPane extends JComponent{ public void paint(Graphics g){ Graphics2D g2d = (Graphics2D) g; Point2D.Float p1 = new Point2D.Float(150.f,75.f);//起点坐标 Point2D.Float p2 = new Point2D.Float(250.f,75.f); float width = 300; float height = 50; GradientPaint g1 = new GradientPaint(p1,Color.green,p2,Color.black,true); Rectangle2D.Float rect1 = new Rectangle2D.Float(p1.x - 100,p1.y -25,width,height); g2d.setPaint(g1);//它是从150处开始绿色,正好是窗口的x/2:中心 g2d.fill(rect1);//画方:从150-100=50处开始,宽300,高50 g2d.setPaint(Color.PINK); g2d.draw(rect1); g2d.draw(new Line2D.Float(p1,p2)); //p1 - 此线段的起始 Point2D p2 - 此线段的结束 Point2D Font font = new Font("Dialog", Font.BOLD ,40); //FontMetrics 类定义字体规格对象,该对象封装将在特定屏幕上呈现特定字体的有关信息。 FontMetrics fontMetrics = getFontMetrics(font);//metrics:度量、指标 GradientPaint g2 = new GradientPaint(150.f,280.f,Color.blue,fontMetrics.stringWidth("Hello"), fontMetrics.getHeight(),Color.red); // 创建一个新 FontMetrics 对象,用于查找该 Font 中关于指定 Font 和特定字符字形的 height 和 width 信息。 g2d.setFont(font); g2d.setPaint(g2); g2d.drawString("Hello", 150, 150); } public static void main(String[] args) { JFrame window = new JFrame("Cyclic Gradient Paint"); window.setBounds(30, 30, 300, 300); window.getContentPane().add(new GradientPane()); window.setVisible(true); } }