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

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

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

但是上面的代码没有在GUI上创建所需的效果。

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

它不能与“repaint()”一起使用太

编辑:

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

在“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

其他提示

  

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

可能有多种原因导致您的代码无效。也许您已经将按钮变量声明了两次,因此您实际上并没有像您认为的那样更改启用/禁用按钮。也许你阻止了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();

}

}

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top