【问题标题】:Java Applet refresh problemsJava Applet 刷新问题
【发布时间】:2010-09-28 01:06:21
【问题描述】:

我有一个 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);
}

谢谢

【问题讨论】:

    标签: java applet refresh


    【解决方案1】:

    你是否真的在启动使用它的线程的任何地方调用 run() 方法?

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

    【讨论】:

    • 或调整大小并设置最小和最大尺寸。
    【解决方案2】:

    作为一般提示,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方法本身意味着它将阻止调用当前类的paintComponentpaintBorderpaintChildren及其祖先类。

    此外,为了调用run() 方法,您的JApplet 应该实现Runnable,并且还应该从您的applet 中的某个位置调用一个新的Thread。 (可能在initstart 方法中。)

    编辑:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        • 2015-08-11
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多