天天看點

java repaint 速度_問一個JAVA repaint()的問題

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()就會以比較慢的速度移動?可以我已經設定了定時器了啊。

展開