繁体   English   中英

不使用paint清除JFrame(Graphics g)

[英]Clearing a JFrame without using paint(Graphics g)

我试图清除JFrame的所有内容,以便我可以显示其他内容。 我不想使用paint(Graphics g)方法,因为我试图从计时器中清除屏幕而我无法使用

clearRect( int , int , int , int )

这是我已经尝试过但IDE出错并且不清除屏幕。

编辑:我的新代码

    JFrame frame = new JFrame("...");
/*...*/

Timer timer = new Timer(5000, new RemoveContentsTask(frame));
timer.start();

/*...*/

public abstract class RemoveContentsTask implements Runnable {

private JFrame frame;

public RemoveContentsTask(JFrame frame) {
    this.frame = frame;
}

public void actionPerformed(ActionEvent evt) {
    frame.getContentPane().removeAll();


     System.out.println("Timer"); 
    }
}
  1. 您应该使用javax.swing.Timer而不是java.util.Timer来确保您遵守Swing的单线程特性并在EDT中进行更新。
  2. 在你提问的上下文中, this.getContentPane().removeAll()this是指TimerTask的实例

相反,你应该尝试更像......

import javax.swing.Timer;
/*...*/

JFrame frame = new JFrame("...");
/*...*/

Timer timer = new Timer(5000, new RemoveContentsTask(frame));
timer.start();

/*...*/

public class RemoveContentsTask implements Runnable {

    private JFrame frame;

    public RemoveContentsTask(JFrame frame) {
        this.frame = frame;
    }

    public void actionPerformed(ActionEvent evt) {
        frame.getContentPane().removeAll();
    }
}

有关更多详细信息,请参阅Swing中的Concurrency

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM