packagechapter16;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassjava16_11extendsJFrame{publicjava16_11(){add(newMovingMessagePanel("LOVE"));}publi...
package chapter16;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class java16_11 extends JFrame
{
public java16_11()
{
add(new MovingMessagePanel("LOVE"));
}
public static void main(String[] args)
{
JFrame frame=new java16_11();
frame.setTitle("java16_11");
frame.setSize(800,600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
static class MovingMessagePanel extends JPanel
{
private String message="LOVE";
private int xCoordinate=0;
private int yCoordinate=20;
public MovingMessagePanel(String message)
{
this.message=message;
Timer timer=new Timer(100,new TimerListener());//建立計時器,100ms是周期
timer.start();//啟動定時器
}
protected void paintComponent(Graphics g)//顯示出string
{
super.paintComponent(g);
if(xCoordinate>getWidth())
{
xCoordinate=0;
}
xCoordinate+=5;
g.setFont(new Font("TimesRoman",Font.PLAIN,24));//應該先進行字型的設定,再對字型進行顯示和移動,否則會按照預設的字型格式類顯示字型
g.setColor(new Color(100,100,200));
g.drawString(message, xCoordinate, yCoordinate);//怎麼改變字型的大小和顔色?
//repaint();
}
class TimerListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
repaint();//每次重新繪制時paintComponent會重新繪制一遍,而每一次調用都會改變xCoordinate,這就實作了字元的移動
}
}
}
}
如果把這段代碼注釋的repaint(),去掉會發現LOVE很快的移動,如果去掉repaing()就會以比較慢的速度移動?可以我已經設定了定時器了啊。
展開