我在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上重置更新通过/失败错误消息。
我怎样才能最好地实现这一目标?
答案 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);
}
}
});
}