2012-07-16 64 views
3

我正在編寫一個簡單的Swing應用程序。我嘗試添加下面列出的複選框。一旦我添加actionHandler 加載選擇器名稱Foo從它坐落在的右側消失chckbxNewCheckBox。我嘗試添加一個電話setHideActionText(),但現在沒有顯示。添加動作後在複選框組件上丟失文本的文本

JCheckBox chckbxNewCheckBox = new JCheckBox("Foo"); 
chckbxNewCheckBox.setToolTipText(""); 
chckbxNewCheckBox.setName(""); 
chckbxNewCheckBox.setHideActionText(true); 
chckbxNewCheckBox.setAction(loadPickers); 
mainPanel.add(chckbxNewCheckBox, "flowy,cell 0 1"); 

如果我改變它,它可以正常工作。我看到文字「Foo」。

JCheckBox chckbxNewCheckBox = new JCheckBox("Foo"); 
chckbxNewCheckBox.setToolTipText(""); 
chckbxNewCheckBox.setName(""); 
chckbxNewCheckBox.setHideActionText(true); 
chckbxNewCheckBox.setAction(loadPickers); 
chckbxNewCheckBox.setText("Foo"); //THIS DOES NOT WORK IF IT COMES BEFORE SET ACTION 
mainPanel.add(chckbxNewCheckBox, "flowy,cell 0 1"); 

我已經在這裏包括了行動的完整性。它爲什麼這樣工作?我在這裏錯過了什麼嗎?目前,我正在使用帶有Mig佈局系統的Eclipse的WindowBuilder插件(我非常喜歡)。不幸的是,我還沒有弄清楚是否有辦法讓WindowBuilder使用.setText()方法,而不是使用構造函數。任何關於我在做什麼錯誤的幫助,關於爲什麼這樣的行爲存在的任何見解,或者對於WindowBuilder來說都是一個很好的解決方法。

private class LoadPickers extends AbstractAction { 
    public LoadPickers() { 
     //putValue(NAME, "SwingAction_2"); 
     putValue(SHORT_DESCRIPTION, "Some short description"); 
    } 
    public void actionPerformed(ActionEvent e) { 
    } 
} 

回答

5

如在AbstractButton.setAction的JavaDoc解釋:

設置操作的結果立即改變Swing Components Supporting Action中描述的所有性質。隨後,按鈕的屬性會隨着Action的屬性更改而自動更新。

因此,所有的以下特性可以通過設置一個動作會受到影響:

  • 啓用
  • 的ToolTipText
  • actionCommand
  • 記憶
  • 文本
  • displayedMnemonicIndex
  • 圖標(NA爲JCheckBox的)
  • 加速器(NA爲JCheckBox的)
  • 選擇
+0

感謝您的回答!我想我並不真正理解讓動作的文本重寫或者將它應用到的按鈕的文本值清空的意義。我有一個單獨的動作處理程序,不知道哪個複選框被點擊,所以我想註冊我的所有複選框與該單一的動作處理程序。在這種情況下,除非我爲每個按鈕製作三個獨立的動作處理程序,否則我必須執行一些額外的動作。這似乎是內在的行動處理程序的價值觀阻止這些行動處理程序的重用? – Jazzepi 2012-07-16 12:46:02