在Swing中禁用GUI上的按钮

时间:2016-10-04 11:03:16

标签: java swing selenium-webdriver jbutton

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

目前按钮如下:

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); 因为它允许我在GUI上重置更新通过/失败错误消息。

我怎样才能最好地实现这一目标?

1 个答案:

答案 0 :(得分:2)

您应该在按钮上添加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);
            }
        }
    });

}