如何在java中禁用javax.swing.JButton?

我创建了一个swings应用程序,GUI上有一个“开始”按钮。 我希望每当我点击“开始”按钮时,应禁用启动按钮并启用“停止”按钮。

为此,我在“开始”按钮的“ActionPeformed(…)”方法中编写了以下代码

startButton.setEnabled(false); stopButton.setEnabled(true); 

但是上面的代码并没有在GUI上创建所需的影响。

以上代码是否符合我的要求?

它也不适用于“repaint()”。

编辑:

代码很长,所以我无法粘贴所有代码。 但是,我可以告诉我更多关于代码的信息。

在“开始”按钮的“ActionPeformed”方法中,在调用上述两个语句之后,我正在执行“SwingWorker”线程。

这个线程是否会产生任何问题?

为此,我在“开始”按钮的“ActionPeformed(…)”方法中编写了以下代码

您需要将代码放在使用“开始”按钮注册的ActionListeneractionPerformed(...)中,而不是“开始”按钮本身。

您可以像这样添加一个简单的ActionListener

 JButton startButton = new JButton("Start"); startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { startButton.setEnabled(false); stopButton.setEnabled(true); } } ); 

请注意,如果要在本地范围内创建匿名侦听器,上面的示例中的startButton将需要是final

代码很长,所以我无法粘贴所有代码。

您的代码不起作用可能有多种原因。 也许您已经将按钮变量声明了两次,因此您实际上并没有像您认为的那样更改启用/禁用按钮。 也许你阻止了EDT。

您需要创建一个SSCCE才能在论坛上发布。

所以由你决定隔离问题。 从一个简单的框架开始,有两个按钮,看看你的代码是否有效。 一旦你开始工作,然后尝试启动一个只是睡眠10秒的线程,看看它是否仍然有效。

在编写200行程序之前,先了解basice如何工作。

学习如何做一些基本的调试,我们不介意读者。 根据您对问题的口头描述,我们无法猜测您正在做什么愚蠢的错误。

这很有效。

 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(); } 

}