【问题标题】:How to disable javax.swing.JButton in java?如何在 java 中禁用 javax.swing.JButton?
【发布时间】:2009-10-26 16:44:38
【问题描述】:

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

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

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

但上面的代码并没有对 GUI 产生预期的影响。

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

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

编辑:

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

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

这个线程有什么问题吗?

【问题讨论】:

  • 以上应该可以工作,你不需要调用repaint(),你能在你的逻辑中发布更多代码吗?
  • 另一种可能性是将开始按钮也用作停止按钮(取决于您的需要),保存当前状态并仅更改文本就足够了。

标签: java user-interface jbutton


【解决方案1】:

为此,我在“开始”按钮的“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 方法做同样的事情......大声笑
  • 抱歉,只是想帮忙。
  • 你从未定义过停止按钮
【解决方案2】:

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

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

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

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

在编写 200 行程序之前先了解基本原理。

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

【讨论】:

  • 同意,你想把这个勺子喂给你吗?您需要帮助,但是当您不清楚时收到了否决的帮助。我创建了一个示例,如下所示,但在按下按钮时调用了 SwingWorker,它在我的示例中运行良好。从小事做起,逐步实现你想要的。
【解决方案3】:

这行得通。

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

}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多