Step By Step(Java 2D图形篇<四>) (二)

2014-11-24 03:21:34 · 作者: · 浏览: 5
void paintComponent(Graphics g) {

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