0

我正在尝试清除 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"); 
    }
}
4

1 回答 1

2
  1. 您应该使用 ajavax.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 中的并发以获取更多详细信息

于 2013-07-30T01:12:59.353 回答