我创建了一个swings应用程序,GUI上有一个“开始”按钮。我希望每当我点击“开始”按钮时,应禁用启动按钮并启用“停止”按钮。
为此,我在“开始”按钮的“ActionPeformed(...)”方法中编写了以下代码
startButton.setEnabled(false);
stopButton.setEnabled(true);
但是上面的代码没有在GUI上创建所需的效果。
以上代码是否符合我的要求?
它也没有使用“repaint()”。
编辑:
代码很长,所以我无法粘贴所有代码。不过,我可以说更多关于代码的信息。
在“开始”按钮的“ActionPeformed”方法中,在调用上述两个语句后,我正在执行“SwingWorker”线程。
这个线程是否会产生任何问题?
答案 0 :(得分:24)
为此,我在“开始”按钮的“ActionPeformed(...)”方法中编写了以下代码
您需要将代码放在使用“开始”按钮注册的actionPerformed(...)
的{{1}}中,而不是“开始”按钮本身。
您可以像这样添加一个简单的ActionListener
:
ActionListener
请注意,如果要在本地范围内创建匿名侦听器,上面的示例中的startButton将需要为JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
startButton.setEnabled(false);
stopButton.setEnabled(true);
}
}
);
。
答案 1 :(得分:7)
代码很长,所以我无法粘贴 所有的代码。
可能有多种原因导致您的代码无效。也许您已经将按钮变量声明了两次,因此您实际上并没有像您认为的那样更改启用/禁用按钮。也许你阻止了EDT。
您需要创建一个SSCCE才能在论坛上发帖。
因此,您可以自行解决问题。从一个简单的框架开始,有两个按钮,看看你的代码是否有效。一旦你开始工作,然后尝试启动一个只需要休眠10秒的线程,看它是否仍然有效。
在编写200行程序之前,先了解basice的工作原理。
学习如何做一些基本的调试,我们不介意读者。根据你对问题的口头描述,我们无法猜出你在做什么愚蠢的错误。
答案 2 :(得分:3)
这很有效。
public class TestButton {
public TestButton() {
JFrame f = new JFrame();
f.setSize(new Dimension(200,200));
JPanel p = new JPanel();
p.setLayout(new FlowLayout());
final JButton stop = new JButton("Stop");
final JButton start = new JButton("Start");
p.add(start);
p.add(stop);
f.getContentPane().add(p);
stop.setEnabled(false);
stop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
start.setEnabled(true);
stop.setEnabled(false);
}
});
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
start.setEnabled(false);
stop.setEnabled(true);
}
});
f.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
new TestButton();
}
}