3

我正在编写一个简单的 Swing 应用程序。我尝试添加一个复选框,如下所示。一旦我添加了 actionHandler loadPickers,名称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) {
    }
}
4

1 回答 1

5

正如AbstractButton.setAction的 JavaDoc 中所解释的:

设置 Action 会立即更改Swing Components Supporting Action中描述的所有属性。随后,按钮的属性会随着动作属性的变化而自动更新。

因此,设置操作会影响以下所有属性:

  • 启用
  • 工具提示文本
  • 动作命令
  • 助记符
  • 文本
  • 显示的助记符索引
  • 图标(JCheckBox 不适用)
  • 加速器(JCheckBox 不适用)
  • 选择
于 2012-07-16T12:39:12.810 回答