0

我有一个 Java 小程序 (JApplet)。此 Applet 使用 JComponent(PanelAux) 来显示定期更改的值和图像。但小程序不会自行刷新。我可以做些什么来刷新我的小程序?

//--------------------------------------------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);
}

谢谢

4

3 回答 3

4

您实际上是否在启动使用它的线程的任何位置调用 run() 方法?

另外:您绝对不想在您的paint()方法中添加新组件!那是在为问题尖叫!

于 2008-12-22T16:04:14.210 回答
3

作为一般提示,在 AWT 和 Swing 中绘画一文描述了您应该如何在 AWT 或 Swing 中处理重绘。

既然您提到您正在使用 a JApplet,那么“摇摆绘画”部分将在这里变得相关。

具体来说,使用 Swing,而不是重载该paint(Graphics g)方法,而paintComponent(Graphics g)应该使用该方法,并调用超类的paintComponent方法。引用“绘画方法”部分:

Swing 程序应该覆盖paintComponent()而不是覆盖 paint().

这是因为paint方法本身被分解为三个独立的方法,覆盖paint方法本身意味着它将阻止对当前类及其祖先类的paintComponentpaintBorder和的调用。paintChildren

此外,为了run()调用该方法,您JApplet应该实现Runnable并且还Thread从您的小程序中的某处调用一个新方法。(可能在initorstart方法中。)

编辑:

还应该注意的paintComponent是,只要屏幕需要刷新,就会调用该方法。该paintComponent方法将被多次调用,因此正如saua 指出的那样paintComponent,在方法本身内实例化新对象并不是一个好主意。

此外,似乎设计是有一个单独的线程(因为小程序似乎正在实现Runnable接口,正如方法的存在所暗示的那样run),JComponent状态的更新可能发生在run方法本身中,与repaint必要时调用该方法。

于 2008-12-22T16:27:51.463 回答
1

你不应该覆盖paint(Graphics g)。

小程序控制台中是否有任何错误异常抛出?

于 2008-12-22T16:06:28.200 回答