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

27

我创建了一个Swings应用程序,并在GUI上添加了一个“Start”按钮。我想让每当我点击“Start”按钮时,该按钮被禁用且“Stop”按钮启用。

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

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

但是以上代码没有在GUI上创建期望的效果。

上述代码是否正确实现了我想做的事情?

即使使用“repaint()”代码也无法正常工作。

编辑:

代码非常长,所以我不能粘贴所有的代码。 我可以告诉你关于代码的更多信息。 在“开始”按钮的“ActionPeformed”方法中,在调用上述两个语句之后,我正在执行一个“SwingWorker”线程。

这个线程会有问题吗?


2
以上应该可以正常工作,你不需要调用repaint(),能否在你的逻辑中发布更多的代码。 - broschb
另一个可能性是将启动按钮也用作停止按钮(取决于您的需求),只需保存当前状态并更改文本即可。 - svens
3个回答

35

为此,我在“开始”按钮的“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


我已经知道了,并且正在正确的actionPerformed方法中进行相同的操作...哈哈 - Amit
抱歉,只是想帮忙。 - akf
您从未定义stopButton。 - Don Larynx

7

由于代码非常长,我无法粘贴全部代码。

你的代码不起作用可能有很多原因。也许你声明了两个按钮变量,所以你并没有像你想象的那样改变启用/禁用按钮。也许你正在阻塞EDT。

你需要创建一个SSCCE在论坛上发布。

因此,你需要分离出问题。从一个简单的框架开始,有两个按钮,看看你的代码是否有效。一旦你做到这一点,然后尝试启动一个线程,它只是休眠10秒钟,看看它是否仍然有效。

首先学习基础知识,然后再编写200行的程序。

学习如何进行一些基本的调试,我们不是心灵读者。我们不能根据你口头描述的问题猜测你正在做什么愚蠢的错误。


2
同意,你想要这个事情被讲得清清楚楚吗?你需要帮助,但是当你没有表达清楚时却对所接受的帮助进行了负面评价。我创建了一个示例,如下所示,但在按钮按下时调用了SwingWorker,在我的示例中它可以正常工作。从小处着手,先让事情正常运转,然后再逐步实现你想要的目标。 - broschb

4

这个可以正常工作。

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

}

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接