Action
同じサブクラスに関連付けられたいくつかのコントロールを備えたSwingGUIを作成しました。サブクラスの実装は、次のAction
擬似コードに従います。
public class MyGUI
{
Gizmo gizmo_; // Defined elsewhere
public class Action_StartPlayback extends AbstractAction
{
/* ctor */
public Action_StartPlayback(String text, ImageIcon icon, String desc, Integer mnem)
{
super(text, icon);
putValue(SHORT_DESCRIPTION, desc);
putValue(MNEMONIC_KEY, mnem);
}
@Override public boolean isEnabled()
{
return gizmo_ == null;
}
@Override public void actionPerformed(ActionEvent e)
{
gizmo_ = new Gizmo();
}
Action_StartPlayback act_;
};
アクションは、次の擬似コードと同様の方法で、ボタンとメニュー項目の両方に関連付けられます。
act_ = new Action_StartPlayback(/*...*/);
// ...
JButton btn = new JButton(act_);
JMenu mnu = new JMenu(act_);
ボタンまたはメニュー項目をクリックすると、アクションactionPerformed
が正しく実行され、 gizmo_
初期化され、非アクティブnull
になり、ボタンとメニュー項目がまだ有効になっていることを除いて、すべてが期待どおりに機能します。
私はそれisEnabled
が再び「自動的に」呼び出されるだろうと思っていましたが、これは明らかに起こっていません。 isEnabled()
二度と呼び出されることはありません。
これは2つの質問を呼び起こします:
@Override
ここで行ったような方法で大丈夫ですisEnabled()
か?isEnabled()
#1の答えが「はい」であるとすると、GUIの更新をトリガーして再度呼び出され、ボタンとメニュー項目が無効になるようにするにはどうすればよいですか?