是否选中swing java复选框?然后循环
我有复选框,我想要
- 如果选中复选框:每10分钟进行一次循环
- 取消选中:从循环中退出
以下是复选框事件:-
final JCheckBox rfh = new JCheckBox("Auto Refresh");
toolbar.add(rfh);
toolbar.setAlignmentX(0);
rfh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
while ( rfh.isSelected() ) {
if (rfh.isSelected()) {
// ((JCheckBox)evt.getSource()).isSelected()
JOptionPane.showMessageDialog(toolbar,"thank you for using java");
Thread.sleep(5 * 1000);
} else {
JOptionPane.showMessageDialog(toolbar,"not selected");
}
}
} catch (Exception e) {
}
}
});
# 1 楼答案
首先看一下:
基本上,Swing是一个单线程环境,所以不要尝试在
ActionPerformed
方法中使用循环和Thread.sleep
两个最简单的解决方案要么是
使用Swing
Timer
Swing
Timer
将允许您设置定期回拨。此回调将在事件调度线程的上下文中执行,这对于从更新UI非常有用它可以很容易地启动和停止
撤回是在EDT的上下文中被通知的,这使得它在调用数据库时是一个糟糕的选择,这可能会导致程序每次被调用时都“结巴”
或者使用
SwingWorker
A
SwingWorker
提供了在后台执行工作的方法,但提供的功能使其易于对UI进行更新基本上,您需要设置某种循环(在workers
doInBackground
方法中),并使用Thread.sleep
等待指定的时间段。一旦Thread.sleep
返回,您将调用数据库,构建一个数据模型,并将其传递给publish
方法在EDT上下文中调用的
process
方法中,您将处理这些结果并相应地更新表模型这样做的缺点是,你需要想出一种方法,让工人停下来(或关掉),如果你愿意的话,重新开始工作