1

我有以下代码:

    timeLeftFinished = false;
    boolean agreed = jCheckBox1.isSelected();
    ActionListener taskPerformer = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            timeLeftFinished = true;
        }
    };
    Timer timer = new Timer(0, taskPerformer);
    timer.setInitialDelay(5000);
    timer.setRepeats(false);
    timer.start();
    while (timeLeftFinished == true && agreed == true) {
        jButton3.setEnabled(true);

timeLeftFinished如果两者都为真,我希望启用 jButton3 我agreed如何检查两者是否为真,并且只有在两者都为真时才启用 jButton3?

旁注:我正在使用 netbeans Gui Builder,也许 IDE 可以生成代码来绑定事件?

是否创建另一个ActionListener以每秒检查两者是否都是可行的实现?

4

1 回答 1

2

您需要检查和监视复选框和计时器的不同状态...

jCheckBox1.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent evt) {
       agreed = jCheckBox1.isSelected();
       updateState();
   }
});
//...
ActionListener taskPerformer = new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        timeLeftFinished = true;
        updateState();
    }
};
Timer timer = new Timer(0, taskPerformer);
//...

protected void updateState() {
    jButton3.setEnabled(timeLeftFinished && agreed);
}

请记住,您在事件驱动的环境中运行,任何事情都很少会以线性方式发生

另外,请记住,UI 在它自己的单个线程中运行。对 UI 状态的所有交互和修改都应在此线程的上下文中发生。如果您执行任何阻止此线程运行的操作(例如使用长时间运行的循环),事件调度线程将无法处理新事件(包括重绘请求),这意味着您的循环可能永远不会退出并且您的程序似乎已经挂起,因为,基本上它已经...

于 2013-10-05T01:21:00.757 回答