2016-10-04 63 views
-3

我已經使用Swing在Java中創建了一個GUI,出於某種原因,我不會讓兩次使用同一個JButton的動作。不能在Swing中使用相同的按鈕兩次

下面是代碼:

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

      } 
     } 
    }); 
    buttonPanel.add(test1); 

此執行硒腳本,測試完成後,我必須重新啓動GUI,以便再次利用同樣的動作。讓我們知道,我有其他按鈕;如test2,test3等,我可以在test1完成後使用它。

+2

可能重複[在Swing中禁用GUI上的按鈕](http://stackoverflow.com/questions/39850620/disable-buttons-on-gui-in-swing) – xenteros

+0

有沒有必要問同樣的問題兩次。 – xenteros

+0

這不是同一個問題,我想了解爲什麼我不能使用相同的按鈕兩次。另一個問題是關於禁用按鈕...我不知道你來自哪裏? –

回答

1

在你的MouseListener處理程序,您必須

 if (test1.isEnabled()) { 
      test1.setEnabled(false); 

所以第一次啓用它,但隨後要禁用按鈕。這就是爲什麼您只能點擊一次的原因

+0

即使第二行'test1.setEnabled(false);'刪除它仍然不允許我使用相同的按鈕兩次 –

0

只有在所有進程完成後(方法runClasses完成),重新啓用按鈕的代碼纔會添加到事件隊列中。我想你在嘗試點擊它之前就會發生這種情況。

+0

嗯,它可能是,但是我100%確定runClasses方法已完成,因爲我得到它在屏幕上呈現一條消息,以顯示測試完成 –

+0

而匿名你傳遞給invokeLater的方法?它被執行了嗎?我會嘗試添加一個日誌跟蹤來檢查 –

相關問題