16 super.paintComponent(g);
17 g.setColor(Color.red);
18 paintString(g);
19 }
20 //绘制文本信息
21 private void paintString(Graphics g) {
22 //1. 生成待绘制文本信息的字体对象
23 Font fi = new Font("SansSerif", Font.BOLD + Font.ITALIC, 18);
24 //2. 获取该字体对象的metadata信息。
25 FontMetrics fm = g.getFontMetrics(fi);
26 String s1 = "Hello World";
27 //根据字体的metadata信息获取带绘制字符串的宽度,
28 //不同的字体,相同字体不同的字号,或者其他属性的不同
29 //都将导致带绘制字符串的宽度不同。
30 int width1 = fm.stringWidth(s1);
31 //根据当前窗体的size和字符串的宽度与高度来计算绘制的起始坐标。
32 Dimension d = getSize();
33 int cx = (d.width - width1) / 2;
34 int cy = (d.height - fm.getHeight()) / 2 + fm.getAscent();
35 g.setFont(fi);
36 //绘制字符串
37 g.drawString(s1, cx, cy);
38 }
39 }
4) 绘制带有纹理的文本信息。
1 public class MyTest extends JPanel {
2 public void paintComponent(Graphics g) {
3 super.paintComponent(g);
4 Graphics2D g2 = (Graphics2D) g;
5 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
6 g2.setFont(new Font("Times New Roman", Font.PLAIN, 72));
7 String s = "Hello World";
8 float x = 20, y = 100;
9 BufferedImage bi = getTextureImage();
10 Rectangle r = new Rectangle(0, 0, bi.getWidth(), bi.getHeight());
11 TexturePaint tp = new TexturePaint(bi, r);
12 g2.setPaint(tp);
13 g2.drawString(s, x, y);
14 }
15 //构造一个正方形图形,该正方形被切成四个部分,每个部分不同的颜色。
16 private BufferedImage getTextureImage() {
17 int size = 8;
18 BufferedImage bi = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
19 Graphics2D g2 = bi.createGraphics();
20 g2.setPaint(Color.red);
21 g2.fillRect(0, 0, size / 2, size / 2);
22 g2.setPaint(Color.yellow);
23 g2.fillRect(size / 2, 0, size, size / 2);
24 g2.setPaint(Color.green);
25 g2.fillRect(0, size / 2, size / 2, size);
26 g2.setPaint(Color.blue);
27 g2.fillRect(size / 2, size / 2, size, size);
28 return bi;
29 }
30 public static void main(String[] args) {
31 JFrame frame = new JFrame();
32 frame.setTitle("Paint Font with Texture");
33 frame.addWindowListener(new WindowAdapter() {
34 public void windowClosing(WindowEvent e) {
35 System.exit(0);
36 }
37 });
38 frame.setContentPane(new MyTest());
39 frame.setSize(800,200);
40 frame.setVisible(true);
41 }
42 }
5) 绘制文本图形对象的轮廓
1 public class MyTest extends JPanel {
2 private int width = 600;
3 private int height = 400;
4 private Font f = new Font("Helvetica", 1, 60);
5 private String s = "Hello World";
6 public void paintComponent(Graphics g) {
7 super.paintComponent(g);
8