悪い考えかもしれませんが、新しいコンストラクターを追加するためにJMenuItemのサブクラスを作成しました。それを呼びましょうJMenuItemX
:
import java.awt.event.ActionListener;
import javax.swing.JMenuItem;
@SuppressWarnings("serial")
public class JMenuItemX extends JMenuItem
{
public JMenuItemX(final String the_text, final char the_mnemonic,
final ActionListener the_action)
{
super(the_text);
setMnemonic(the_mnemonic);
addActionListener(the_action);
}
}
今、私はAbstractActionを使用してコンポーネントにツールチップを追加しようとしています:
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
@SuppressWarnings("serial")
public class AboutAction extends AbstractAction
{
public AboutAction()
{
super("About");
putValue(SHORT_DESCRIPTION, "Show the popup window");
}
@Override
public void actionPerformed(final ActionEvent the_event)
{
JOptionPane.showMessageDialog(null, "Hello World!");
}
}
コンポーネントをそのように構築します (JFrame、JMenuBar、および JMenu は既にセットアップされています)。
menu.add(new JMenuItemX("About", 'a', new AboutAction()));
(ご覧のとおり、複数のメニュー項目を追加する場合、この 1 行形式の方が読みやすいです。)
メニュー項目は正しいテキストで表示され、ニーモニックとアクションは期待どおりに機能します。しかし、ツールチップはありません...しかし、単純にJMenuItemを使用すると、ツールチップが機能します!
JMenuItem about = new JMenuItem(new AboutAction());
about.setMnemonic('a');
menu.add(about);
AbstractAction を JMenuItem サブクラスで動作させるにはどうすればよいですか?