我写了一个JButton,触发一个执行程序的事件。然后设置为setEnabled(false);与之相反的另一个JButton

设置为setEnabled(true);但有时程序可能要运行很长时间,在此期间两个JButton的状态都改变不了,也都点击不了。我把状态的改变放在程序执行之前也不行。如何... 设置为setEnabled(true);但有时程序可能要运行很长时间,在此期间两个JButton的状态都改变不了,也都点击不了。我把状态的改变放在程序执行之前也不行。如何能点击之后就改变JButton的状态? 展开
 我来答
历盆郁7
2014-03-31 · TA获得超过4277个赞
知道大有可为答主
回答量:1795
采纳率:100%
帮助的人:949万
展开全部

用多线程来做,

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

class Demo extends JFrame {

    private JButton btn0;
    private JButton btn1;
    private JTextArea area;

    public Demo() {

        setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);

        setBounds(0, 0, 500, 400);

        btn0 = new JButton("按钮0");
        btn0.setBounds(10, 10, 100, 20);
        btn0.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                btn0.setEnabled(false);
                btn1.setEnabled(true);
                new ThreadTest(area).start();
            }
        });

        btn1 = new JButton("按钮1");
        btn1.setBounds(10, 40, 100, 20);
        btn1.setEnabled(false);
        btn1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                btn0.setEnabled(true);
                btn1.setEnabled(false);
                new ThreadTest(area).start();
            }
        });

        area = new JTextArea();
        area.setBounds(10, 70, 480, 300);

        getContentPane().add(btn0);
        getContentPane().add(btn1);
        getContentPane().add(area);

        setVisible(true);
    }
}

class ThreadTest extends Thread {

    private JTextArea area;

    public ThreadTest(JTextArea area) {
        this.area = area;
    }

    public void run() {

        for (int i = 0; i < 10; i++) {
            area.append("正在执行" + i + "\r\n");
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
Cry_小衰
2014-03-31 · TA获得超过219个赞
知道小有建树答主
回答量:172
采纳率:0%
帮助的人:138万
展开全部
你这中间执行什么耗时操作了 要这么久 addActionListener里直接添加mouse的监听 再setEnabled就行了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
soul丶gift
2014-03-31 · TA获得超过102个赞
知道小有建树答主
回答量:92
采纳率:0%
帮助的人:77万
展开全部
开启一个新的线程去执行那些耗时的代码就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式