java - 基本 Java Swing JFrame 重绘

标签 java swing jframe repaint

Swing 新手,但 Java 新手。我正在尝试以下操作:

public void actionPerformed(ActionEvent e) {

methodA();
pane.repaint();
methodB();
pane.repaint();

}

其中 methodB() 需要很长时间。我希望它绘制两次,但第一次绘制调用从未发生。就好像我这样做了:

public void actionPerformed(ActionEvent e) {

methodA();
methodB();
pane.repaint();

}

抱歉,如果这是基本的,但我尝试过搜索,但仍然不明白为什么。

我尝试过直接调用paint,它按预期工作,只是应用程序在每次重绘时都会闪烁。

最佳答案

actionPerformed 在事件调度线程 (EDT) 中调用,这也是执行绘制的地方,repaint 仅标记要重新绘制的组件。这意味着绘画只能在 actinPerformed 执行完成后才能完成。

不应在 EDT 中执行长时间运行的任务,请使用 SwingWorker或另一个线程。

表示学习Swing's Threading Policy !

关于java - 基本 Java Swing JFrame 重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44625482/

相关文章:

java - JDBC 连接 : How to specify the port for data-transfer?

Java正在画2个盒子

java - JPanel 只显示一个对象

java - 使用 KeyEventDispatcher 设置 jframe 大小

Java 级联 JFrames

java - ListenableFutureTask/ExecutorService

java - 如何保存用户上次阅读的页码

java - 为什么数据没有显示在我的 ListView 上?

java - 如何从 Java Swing 应用程序中识别监视器?

java - 如何将 jTextfield 中的数据添加到 jTable 中?我不知道为什么我会失败。请看一下