闂傚倷娴囬妴鈧柛瀣崌閺岀喖顢涘⿰鍐炬毉濡炪們鍎婚幏锟� (0) +1 闂備浇宕垫慨宥咁吋閸℃浼� (0) +1 闂傚倸鍊搁オ瀛樼閻戣棄绠柨鐕傛嫹 (0) +1
闂傚倷娴囬妴鈧柛瀣崌閺岀喖顢涘⿰鍐炬毉濡炪們鍎查崹鍧楀蓟閻旇 鍋撳☉娅亝鎱ㄩ崶褉鏀芥い鏇炴鐎氾拷闂傚倷绀侀幖顐ゆ偖椤愶箑纾块柛鎰嚋閼板潡鏌涘☉娆愮稇缂備讲鏅犻弻鐔碱敍濠婂喚鏆銈冨劵閹凤拷>>
0

正在阅读:跟我学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)?

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

关注我们

最新资讯离线随时看 聊天吐槽赢奖品
闂備礁缍婂ḿ褔顢栭崱妞绘敠闁逞屽墴閹鎷呴崨濠備淮濠碘槅鍋撻幏锟�闂備焦鎮堕崕鎶藉磻濞戙垹鏄ラ悘鐐板嫎娴滄粓鏌涢锝嗙闁告棑鎷�