我有一个Java Applet(JApplet)。此Applet使用JComponent(PanelAux)来显示定期更改的值和图像。但是applet并没有刷新自己。我该怎么做才能刷新我的applet?
//--------------------------------------------RUN
public void run()
while (true) {
try {
myThread.sleep(1000);
}
catch (InterruptedException e){
}
repaint();
}
}
//--------------------------------------------PAINT
public void paint(Graphics g)
{
dim = new Dimension(image.getWidth(this)+50,image.getHeight(this)+50);
this.resize(dim);
this.setMaximumSize(dim);
this.setMinimumSize(dim);
PanelAux panel = new PanelAux(image); //JComponent
add(panel);
super.paint(g);
}
谢谢
答案 0 :(得分:4)
你是否真的在启动使用它的Thread的任何地方调用run()方法?
另外:您绝对不想在paint()
方法中添加新组件!那是为了问题而尖叫!
答案 1 :(得分:3)
作为一般提示,Painting in AWT and Swing文章介绍了如何处理AWT或Swing中的重新绘制。
由于您提到您使用的是JApplet
,因此“Painting in Swing”部分将在此处发布相关内容。
具体来说,使用Swing,而不是重载paint(Graphics g)
方法,应该使用paintComponent(Graphics g)
方法,而是调用超类“paintComponent
方法。引自“Paint Methods”部分:
Swing程序应该覆盖
paintComponent()
而不是覆盖paint()
。
这是因为paint
方法本身被分解为三个单独的方法,覆盖paint
方法本身意味着它将阻止调用paintComponent
,paintBorder
和当前班级及其祖先班级的paintChildren
。
此外,为了调用run()
方法,您的JApplet
应该实现Runnable
,并且还会从您的applet中的某个位置调用新的Thread
。 (可能在init
或start
方法中。)
修改强>
还应该注意,只要屏幕需要刷新,就会调用paintComponent
方法。 paintComponent
方法将被多次调用,因此saua points out,在paintComponent
方法本身中实例化新对象不是一个好主意。
此外,似乎设计是有一个单独的线程(因为applet似乎正在实现Runnable
接口,正如run
方法的存在所暗示的那样),更新JComponent
方法可以在run
方法本身中进行,如有必要,可以调用repaint
方法。
答案 2 :(得分:1)
你不应该覆盖绘画(图形g)。
applet控制台中是否有任何错误异常抛出?