java复选框已选中?然后循环

时间:2014-08-06 04:57:13

标签: java swing checkbox

我有复选框,我想要

  1. 如果选中复选框:每10分钟制作一次循环
  2. 取消选中:从循环中退出
  3. 以下是复选框事件: -

    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 个答案:

答案 0 :(得分:2)

首先看看:

基本上,Swing是一个单线程环境,所以不要试图在Thread.sleep方法中使用循环和ActionPerformed

两个最简单的解决方案是......

使用Swing Timer

Swing Timer将允许您设置定期的预定回拨。此回调将在事件调度线程的上下文中执行,因此非常适合更新UI。

它可以轻松启动和停止。

退回是,它在EDT的上下文中被通知,这使得它成为调用数据库的不良选择,这可能导致程序在每次调用时“断断续续”......

或使用SwingWorker

SwingWorker提供了在后台执行工作的方法,但提供了可以轻松更新UI的功能。

基本上,您需要设置某种循环(在worker doInBackground方法中)并使用Thread.sleep等待一段规定的时间。一旦Thread.sleep返回,您就可以调用数据库,构建数据模型并将其传递给publish方法。

在EDT上下文中调用的process方法中,您将处理这些结果并相应地更新您的表格模型......

这样做的缺点是你需要设计工人可以停止(或关闭)的方法,如果你这么倾向,重新启动...