2011-05-12 34 views
0

我正在編寫一個非常簡單的IDE來開發嵌入式程序(用於iRobot的創建平臺),幾乎每個按鈕和菜單項都由Java的Action系統支持。 這使得處理用戶所需的所有操作變得更加容易,而無需重複操作的觸發器。Java:禁用動作應禁用JButtons和JMenuItems

我想知道的是,如何通過禁用Action本身來禁用從Action創建的JButton和JMenuItem?

如果有幫助,我寫了一個Action-wrapping類,它允許我直接從Action本身創建一個JButton或JMenuItem,這意味着我已經有鉤子來添加東西到按鈕或菜單項目應該是需要的。

有什麼建議嗎?

+0

當你嘗試過什麼事禁用該操作?正如答案中提到的那樣,應該在沒有任何進一步要求的情況下進行工作。如果沒有,你的代碼出了問題:-) – kleopatra 2011-05-12 11:54:35

+0

@kleopatra:看來這確實是我的代碼在這裏的錯誤。我正在檢查一個JTabbedPane,看看誰選中了,不知何故它失敗了... – Raceimaztion 2011-05-12 18:05:05

回答

3

簡短的回答:
anAction.setEnabled(false);

較短的答案:
http://sscce.org/

+0

好吧,看來我的問題與Actions不關聯的按鈕和菜單項無關,而是更多的應該觸發禁用Actions的代碼。 – Raceimaztion 2011-05-12 18:01:50

0

可以將所有按鈕和的菜單項存儲List<AbstractButton> buttons並添加監聽行動:

action.addPropertyChangeListener(new PropertyChangeListener() { 
    public void propertyChange(PropertyChangeEvent evt) { 
     if (evt.getPropertyName().equals("enabled")) { 
     boolean isEnabled = (Boolean)evt.getNewValue(); 
     for (AbstractButton button : buttons) { 
      button.setEnabled(isEnabled); 
     } 
     } 
    } 
}); 
+0

錯誤的答案 - 這已經在內部完成 – kleopatra 2011-05-12 11:55:01

+0

看來我的代碼有更多的錯誤操作不禁用其他事情。我會通過我的代碼來查看問題所在。 – Raceimaztion 2011-05-12 18:05:40