2016-10-04 39 views
0

Seleniumでクリックしたときにテストを実行するGUI上のボタンがあります。それらはシリアルでのみ実行でき、現在はEventQueueに追加されています。ボタンをクリックしてテストを実行すると他のボタンが無効になり、他のテストをキューに追加できないようにしたいと思います。それは私がGUI上で更新合格/不合格のエラーメッセージをリセットすることを可能にするようSwingでGUIのボタンを無効にする

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を使用しています

現在のボタンは次のようになります。

これをどのようにして最高に達成できますか?

+0

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

、あなたはボタンの状態を維持したいが、それを無効にしない、次のコードは、解決策になるかもしれませんか?無効なエフェクトが必要ない場合、つまりボタンをクリックできるようにしても何もしないアクションがあれば、共有セマフォー(ロックオブジェクトなど)を使用できます。 – Thomas

+1

このようにMouseListenersを使用しないでください。これがActionListenersの目的です。 1つは、ボタンが無効な場合はMouseListenersが無視し、ActionListenersは無効な場合は無視されます。 –

+0

私の答えはあなたを助けましたか?私は私の答えを改善できるように私にいくつかのフィードバックをください。 – xenteros

答えて

2

ボタンにActionListenerを追加する必要があります。さらに重要なのは、オブジェクトの名前が小文字で始まることを意味する命名規則を使うべきです。大文字は、クラスと静的フィールド(すべて大文字)に予約されています。次のコードは、にActionListenerを追加し、クリックした後に無効にします。それがあなたが探しているものでなければ、私はもう一度バージョンを追加します。あなたのコードの問題は何

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

} 
関連する問題