java - 不使用绘图清除 JFrame(图形 g)

标签 java swing jpanel paint event-dispatch-thread

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

看看Concurrency in Swing了解更多详情

关于java - 不使用绘图清除 JFrame(图形 g),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17936754/

相关文章:

java - 如何将这两个渲染器应用到同一个 JTable 上?

Java Swing : format content inside dialog

java - Jpanel调整大小时如何使图像居中

同一项目中的 Java Spring Boot MVC 和 CLI API

java - 序列化对象会发生什么?如何在整个序列化过程中保持观察者?

java - 如何使用时间延迟在jtextarea中显示数据库数据?

java - 如何仅在布局后将内容添加到 JPanel

java - Android:即使数据库不为空,游标也始终返回 null

java - 创建具有指定类型的集合(例如 map ) - 不使用通用对象类

java - 在VLCJ @ Java中添加字幕和基本操作面板