gpt4 book ai didi

java - 您可以通过 EventQueue 逐步更新 JPanel 吗?

转载 作者:行者123 更新时间:2023-11-30 09:10:38 25 4
gpt4 key购买 nike

我有一个登录屏幕,需要设置三个连接。每次成功建立连接时,我都会立即希望在它旁边显示一个缓冲图像(打勾或打叉)。

目前,在主线程完成并且所有三个连接都已设置之前,图像不会出现。我已经尝试生成新线程来处理正在设置的单独连接,看看这是否有帮助,但没有帮助。

加载图像(交叉相同):

 // Create new JLabel to hold images; stored as a field
picLabelDataMapper = new JLabel();

try {
logger.debug("Reading tick.png image");
tick = ImageIO.read(new File("tick.png")); // Global Field
} catch (IOException e) {
// TODO Auto-generated catch block
logger.debug("Read tick.png failed");
e.printStackTrace();
}

// Ensure label is not visible; nothing is loaded at this moment anyway
picLabelDataMapper.setVisible(false);
// Add label to panel
panelDataMapper.add(picLabelDataMapper, "cell 3 1");

检查数据库是否设置成功:

/**
* Ensure the data Mapper database was set up successfully
*/
public void checkForDataMapperCompletion(){

if(dataMapperPassed){

picLabelDataMapper.setIcon(new ImageIcon(tick));
picLabelDataMapper.setVisible(true);

}else{
picLabelDataMapper.setIcon(new ImageIcon(cross));
picLabelDataMapper.setVisible(true);
}
}

那么执行这样的顺序更新的最佳方法是什么:

数据库 1 设置 > 更新 GUI

数据库 2 设置 > 更新 GUI

数据库 3 设置 > 更新 GUI

任何人都可以推荐探索的方向/途径?提前致谢。

最佳答案

将数据库调用放在单独的线程上会让您走上正轨。但是,要在每个线程完成后更新 GUI,您需要将 GUI 更新放入 Runnable,然后调用 SwingUtilities.invokeLater(Runnable)。

这是一个粗略的伪示例:

public void hitDatabase() {
Thread thread = new Thread(new DatabaseHelper());
thread.start();
}

private static class DatabaseHelper implements Runnable {
public void run() {
//Hit the DB here
codeToHitDB();

//Once Complete update the GUI
Runnable runnable = new Runnable() {
public void run() {
//Update your GUI
}
};

SwingUtilities.invokeLater(runnable);
}
}

本教程将为您提供更多信息:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/

还有一个 SwingWorker 类,一些人声称它可以使这更容易。教程中有关于SwingWorker的详细介绍。

关于java - 您可以通过 EventQueue 逐步更新 JPanel 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22456451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com