【问题标题】:Disable buttons on GUI in Swing在 Swing 中禁用 GUI 上的按钮
【发布时间】:2016-10-04 11:03:16
【问题描述】:

我有一个 GUI 上的按钮,当在 Selenium 中单击时执行测试。它们只能串行运行,目前已添加到EventQueue。我希望这样,如果单击按钮并执行测试,它将禁用其他按钮,以便其他测试无法添加到队列中。

目前一个按钮看起来像:

    Test1 = new JButton("Test1 ");
    Test1.setLocation(290, 30);
    Test1.setSize(120, 30);
    Test1.addActionListener(this);
    Test1.addMouseListener(new MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent e) {
            if (Test1.isEnabled()) {
                Test1.setEnabled(false);
                errorLabel.setText("");
                service.submit(()->{
                    Result result = JUnitCore.runClasses(Test1.class);
                    EventQueue.invokeLater(()->{
                        errorMessageDisplay(result);
                        Test1.setEnabled(true);
                    });
                });
            }
        }
    });
    buttonPanel.add(Test1);

我使用了EventQueue,因为它允许我在 GUI 上重置更新通过/失败错误消息。

我怎样才能最好地做到这一点?

【问题讨论】:

  • 你的代码有什么问题?如果您不需要禁用效果,即如果按钮可以单击但操作不执行任何操作,则可以使用共享信号量(例如锁定对象)。
  • 你不应该以这种方式使用 MouseListeners。这就是 ActionListener 的用途。一方面,如果按钮被禁用,MouseListeners 会忽略,而 ActionListeners 不会。
  • 我的回答对您有帮助吗?给我一些反馈,以便我改进我的答案。
  • 嗨,我目前正在尝试实现它,我在 GUI 上有 15 个按钮,所以我需要将这些都设置为默认禁用?

标签: java swing selenium-webdriver jbutton


【解决方案1】:

您应该将ActionListener 添加到您的按钮。更重要的是,您应该使用命名约定,这也意味着您的对象名称应该以小写字母开头。大写字母保留给类和静态字段(全部大写)。以下代码将ActionListener 添加到您的JButton 并在单击后将其禁用。如果不是您要的内容,我稍后会添加另一个版本。

test1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            test1.setEnabled(false);
        }
    });

如果您想保留按钮的状态,但不要禁用它,以下代码可能是一个解决方案:

private final static String ENABLED = "ENABLED";
private final static String DISABLED = "DISABLED";

public static void main(String[] args) {
    Map<JButton, String> map = new HashMap<>();
    JButton test1 = new JButton();
    map.put(test1, ENABLED);
    test1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (map.get(test1).equals(ENABLED)) {
                //do something
            } else {
                //do something else. I'll enable.
                map.remove(test1);
                map.put(test1, ENABLED);
            }
        }
    });

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2015-08-11
    • 2013-05-22
    • 2013-10-12
    • 2016-06-15
    相关资源
    最近更新 更多