有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

是否选中swing java复选框?然后循环

我有复选框,我想要

  1. 如果选中复选框:每10分钟进行一次循环
  2. 取消选中:从循环中退出

以下是复选框事件:-

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

  1. # 1 楼答案

    首先看一下:

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

    两个最简单的解决方案要么是

    使用Swing Timer

    Swing Timer将允许您设置定期回拨。此回调将在事件调度线程的上下文中执行,这对于从更新UI非常有用

    它可以很容易地启动和停止

    撤回是在EDT的上下文中被通知的,这使得它在调用数据库时是一个糟糕的选择,这可能会导致程序每次被调用时都“结巴”

    或者使用SwingWorker

    A SwingWorker提供了在后台执行工作的方法,但提供的功能使其易于对UI进行更新

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

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

    这样做的缺点是,你需要想出一种方法,让工人停下来(或关掉),如果你愿意的话,重新开始工作