我写了一个JButton,触发一个执行程序的事件。然后设置为setEnabled(false);与之相反的另一个JButton
设置为setEnabled(true);但有时程序可能要运行很长时间,在此期间两个JButton的状态都改变不了,也都点击不了。我把状态的改变放在程序执行之前也不行。如何...
设置为setEnabled(true);但有时程序可能要运行很长时间,在此期间两个JButton的状态都改变不了,也都点击不了。我把状态的改变放在程序执行之前也不行。如何能点击之后就改变JButton的状态?
展开
3个回答
展开全部
用多线程来做,
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();
}
}
}
}
展开全部
你这中间执行什么耗时操作了 要这么久 addActionListener里直接添加mouse的监听 再setEnabled就行了啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
开启一个新的线程去执行那些耗时的代码就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询