3

シンプルなSwingアプリを書いています。以下のチェックボックスを追加してみました。actionHandler loadPickersを追加すると、chckbxNewCheckBox右側の横にある場所からFooという名前が消えました。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");

完全を期すために、ここにアクションを含めました。なぜこのように機能するのですか?ここで何かが足りませんか?現在、私はEclipse用のWindowBuilderプラグインをMigレイアウトシステム(私は本当に気に入っています)で使用しています。残念ながら、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で説明されているように:

アクションを設定すると、アクションをサポートするスイングコンポーネントで説明されているすべてのプロパティがすぐに変更されます。その後、アクションのプロパティが変更されると、ボタンのプロパティが自動的に更新されます。

したがって、アクションを設定すると、次のすべてのプロパティが影響を受ける可能性があります。

  • 有効
  • toolTipText
  • actionCommand
  • ニモニック
  • 文章
  • 表示されたMnemonicIndex
  • アイコン(JCheckBoxの場合はNA)
  • アクセラレータ(JCheckBoxのNA)
  • 選択
于 2012-07-16T12:39:12.810 に答える