问一个JAVA repaint()的问题

packagechapter16;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publiccl... 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()就会以比较慢的速度移动?可以我已经设置了定时器了啊。
展开
 我来答
匿名用户
2015-05-11
展开全部


在paintComponent中,再调用repaint,相当是一时间内两次paint了——甚至10遍。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式