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

如何在java中禁用javax.swing.JButton?,java,user-interface,jbutton,Java,User Interface,Jbutton,我已经创建了一个swings应用程序,GUI上有一个“开始”按钮。我希望每当我点击“开始”按钮时,开始按钮应该被禁用,“停止”按钮应该被启用 为此,我在“开始”按钮的“ActionPeformed(…)”方法中编写了以下代码 但是上面的代码并没有在GUI上产生所需的效果 上面的代码对我想做的事情正确吗 “repaint()”也不起作用 编辑: 代码很长,所以我无法粘贴所有代码。不过,我可以告诉你更多关于代码的信息 在“start”按钮的“ActionPeformed”方法中,在调用上述两条语句之

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

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

但是上面的代码并没有在GUI上产生所需的效果

上面的代码对我想做的事情正确吗

“repaint()”也不起作用

编辑:

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

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

这个线程有什么问题吗

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

您需要将该代码放在使用开始按钮注册的
ActionListener
actionPerformed(…)
中,而不是针对开始按钮本身

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

JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {
        startButton.setEnabled(false);
        stopButton.setEnabled(true);
     }
   }
 );
请注意,如果要在本地范围内创建匿名侦听器,则上面的startButton必须是上例中的final

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

}
}

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

代码不起作用的原因可能有很多。也许您声明了两次按钮变量,这样您就不会像您想象的那样实际更改按钮的启用/禁用。也许你正在阻止EDT

你需要在论坛上创建一个帖子

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

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


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

上述操作应该有效,您不需要调用repaint(),您可以在逻辑中发布更多代码吗?另一种可能是将“开始”按钮也用作“停止”按钮(取决于您的需要),保存当前状态并更改文本就足够了。我知道这一点,并且正在使用正确的actionPerformed方法执行相同的操作…抱歉,只是想帮助解决问题。您从未定义stopButtonAgreed,是否要将此勺子喂给您?你需要帮助,但当你不清楚的时候,你得到了向下投票的帮助。我创建了一个示例,如下所示,但在按下按钮时调用了一个SwingWorker,在我的示例中效果很好。从小事做起,做你想做的事。
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();

}