2012-07-16 29 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

相关问题