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

2022-09-01 15:39:16

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

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

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

但是上面的代码并没有在GUI上产生预期的效果。

上面的代码对于我想要做的事情是否正确?

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

编辑:

代码很长,所以我无法粘贴所有代码。不过,我可以更多地了解代码。

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

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


答案 1

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

您需要该代码位于已注册的“开始”按钮中,而不是“开始”按钮本身。actionPerformed(...)ActionListener

你可以添加一个简单的,如下所示:ActionListener

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

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


答案 2

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

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

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

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

在编写 200 行程序之前,请先了解基础知识的工作原理。

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


推荐