禁用后在jButton上执行的操作

时间:2012-09-11 07:02:19

标签: java swing concurrency jbutton event-dispatch-thread

我有使用Swing的示例代码。

package playerlist;

import java.awt.FlowLayout;
import javax.swing.*;
import java.awt.event.*;

public class Sample extends JFrame{
    private JButton button1;
    private JButton button2;

    public Sample(){
        super();
        setTitle("Sample JFrame");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button1 = new JButton("Button 1");
        button2 = new JButton("Button 2");

        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                button1ActionPerformed(e);
            }
        });
        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                button2ActionPerformed(e);
            }
        });

        setLayout(new FlowLayout());

        add(button1);
        add(button2);
        pack();
    }

    private void button1ActionPerformed(ActionEvent ae){
        button1.setEnabled(false);
        button2.setEnabled(false);
        try{
              Thread.sleep(5000);
        }catch(Exception e){

        }
        System.out.println("*** Button 1 Clicked ***");
        button1.setEnabled(true);
        button2.setEnabled(true);
    }

    private void button2ActionPerformed(ActionEvent ae){
        button1.setEnabled(false);
        button2.setEnabled(false);
        try{
            Thread.sleep(5000);
        }catch(Exception e){

        }
        // I have disabled this button from button 1's action, but still when I click this button within
        // 5 seconds, actions of this button is performed
        System.out.println("*** Button 2 Clicked ***");
        button1.setEnabled(true);
        button2.setEnabled(true);
    }

    public static void main(String [] args){
        new Sample().setVisible(true);
    }
}

我想要 - 当我点击button1时(当button1的动作开始时),应禁用button1和button2(如果我点击禁用按钮,则不应执行任何操作)。我已使用setEnabled(false)禁用了这两个按钮。当button1的操作完成时,应启用两个按钮。 但是在我的代码中,这不起作用,即使在禁用按钮后,也会对禁用按钮执行操作。 在button1的操作中,我已禁用两个按钮并使用睡​​眠方法暂停执行(用于模拟繁重的工作)5秒,但在5秒内如果我单击任何按钮,则在完成button1的操作后触发它们的操作。 请帮我。我提供了示例代码,当您运行它时,单击button1后,然后立即按钮2,执行两个按钮的操作。 我想按下任何按钮时,按钮的点击操作将完成繁重的工作,同时我将禁用所有按钮,因此不能执行任何其他操作。第一个操作完成后,我将启用所有按钮。 请帮我。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

我通过在新线程上单击按钮执行任务来完成此工作。