Может быть, это плохая идея, но я написал подкласс для JMenuItem, чтобы добавить новый конструктор. Давайте назовем это JMenuItemX
:Использует метод AbstractionAction putValue() с подклассами JMenuItem и т. Д.?
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()));
(Как вы можете видеть, если я добавляю несколько пунктов меню, этот формат однострочного легче читать.)
Пункт меню отображается с правильным текстом, и мнемоническая и действие работа как и ожидалось. Но нет подсказки ... Однако, если я просто использую JMenuItem, всплывающая подсказка работает!
JMenuItem about = new JMenuItem(new AboutAction());
about.setMnemonic('a');
menu.add(about);
Как я могу получить AbstractAction работать с моим JMenuItem подклассе?
спасибо. Я должен был понять, что 'JMenuItem (действие)' не совпадает с 'JMenuItem.addActionListener()'. – iglvzx