Java 做抽象动作';s putValue()方法是否可以处理JMenuItem等的子类?
也许这是个坏主意,但我为写了一个子类来添加一个新的构造函数。让我们称之为Java 做抽象动作';s putValue()方法是否可以处理JMenuItem等的子类?,java,swing,Java,Swing,也许这是个坏主意,但我为写了一个子类来添加一个新的构造函数。让我们称之为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_mne
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);
}
}
现在,我尝试使用以下方法向组件添加工具提示: 并按原样构造组件(JFrame、JMenuBar和JMenu已经设置好): (如您所见,如果我添加多个菜单项,则此单行格式更易于阅读。)
菜单项显示正确的文本,助记符和操作按预期工作。但是没有工具提示。。。但是,如果我只使用JMenuItem,工具提示会起作用
JMenuItem about = new JMenuItem(new AboutAction());
about.setMnemonic('a');
menu.add(about);
如何让AbstractAction与我的JMenuItem子类一起工作?您被重写的构造函数不使用将操作作为参数的JMenuItem构造函数,也不调用
setAction()。因此,您的菜单项与操作没有关联
我不会仅仅为了添加构造函数而创建子类。为什么不简单地创建一个工厂方法呢
public JMenuItem createMenuItemWithListener(String text,
char mnemonic,
ActionListener action) {
JMenuItem result = new JMenuItem(text);
result.setMnemonic(mnemonic);
result.addActionListener(action);
return result;
}
public JMenuItem createMenuItemWithAction(char mnemonic,
Action action) {
JMenuItem result = new JMenuItem(action);
result.setMnemonic(mnemonic);
return result;
}
非常感谢。我应该意识到JMenuItem(action)
与JMenuItem.addActionListener()
不同。
JMenuItem about = new JMenuItem(new AboutAction());
about.setMnemonic('a');
menu.add(about);
public JMenuItem createMenuItemWithListener(String text,
char mnemonic,
ActionListener action) {
JMenuItem result = new JMenuItem(text);
result.setMnemonic(mnemonic);
result.addActionListener(action);
return result;
}
public JMenuItem createMenuItemWithAction(char mnemonic,
Action action) {
JMenuItem result = new JMenuItem(action);
result.setMnemonic(mnemonic);
return result;
}