我正在尝试清除 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");
}
}
最佳答案
- 您应该使用
javax.swing.Timer
而不是java.util.Timer
确保您尊重 Swing 的单线程性质并在 EDT 内进行更新。 - 就您的问题而言,
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();
}
}
看看Concurrency in Swing了解更多详情
关于java - 不使用绘图清除 JFrame(图形 g),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17936754/