正在阅读:跟我学Java Swing之游戏设计(3)跟我学Java Swing之游戏设计(3)

2005-10-26 10:04 出处: 作者:张剑 责任编辑:xietaoming

  善用Graphics绘制图形

  在前面所有的章节中,我们都是使用现成的控件来满足自己的需要,现成的控件虽然使用方便,却不能完全满足我们的要求。这时我们就需要了解一下如何不使用控件来绘制图形。

  无论是Swing控件也好,AWT控件也好,他们都会有一个paint(Graphics g)方法,一般情况下我们不会去理它的,然而,当我们需要自己绘制图形的时候,我们就不得不对这个方法有所了解。

  为了让大家能够接受自己绘制图形的方法,我们还是从paint(Graphics g)方法讲起吧:paint(Graphics g)方法将控件看作一张空白的纸,当我们需要绘制图形的时候,就可以使用Graphics提供的一些基本方法来进行绘制。为了方便大家理解,我们新建一个Clock类来完成用户时间的显示,代码如下:

import javax.swing.*;
import java.awt.*;

public class Clock

extends JPanel {

Font font48 = new Font("serif", Font.BOLD, 48);
   this.setMinimumSize(new Dimension(156, 48));
    this.setPreferredSize(new Dimension(156, 48));
 }

public void paint(Graphics g) {
    g.setColor(new Color(111, 146, 212));
    g.clearRect(0, 0, this.getWidth(), this.getHeight());
    g.setColor(Color.yellow);
    g.setFont(font48);
    g.drawString("307", 16, 40);
  }
}

  以上内容应该在我们新建的Clock.java文件中,代码并不难读懂,大家可以自己查看文档找到相关函数的使用说明。然后,我们将原来程序中显示时间的代码部分改为:

Clock clock = new Clock();
actionPanel.add(clock);

  怎么样,运行结果是否相同?虽然此时我们仍然没有消除文字上的锯齿,不过已经对Swing中自己绘制图形有了一个大致的了解。

  随心所欲的Graphics2D

  对于追求最佳视觉效果的我们,文字上的锯齿显示是不能容忍的。那么如何解决这个问题呢?既然这是Swing控件显示字体的通病,并且就连Graphics也无能为力,看来,我们只有另辟蹊径了。

  好在Sun也意识到了这一点,因此在Java中提供了Graphics2D类来解决这种问题。下面,我们将依然使用代码来说明问题:

public void paint(Graphics g) {
  Graphics2D g2 = (Graphics2D) g;
  Dimension d = getSize();
  g2.setBackground(new Color(111, 146, 212));
  g2.clearRect(0, 0, d.width, d.height);
  g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
  RenderingHints.VALUE_ANTIALIAS_ON);
  g2.setColor(Color.yellow);
  g2.setFont(font48);
  g2.drawString("123", 16, 40);
}

  在上述的代码中,我们将Graphics对象转换成Graphics2D对象后,只需使用简单的一句setRenderingHint()就完成了抗锯齿的功能。现在再来看看程序运行的效果,你还满意吗(见图3)?

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品