gpt4 book ai didi

java - AbstractionAction 的 putValue() 方法是否适用于 JMenuItem 等的子类?

转载 作者:行者123 更新时间:2023-11-29 05:59:43 25 4
gpt4 key购买 nike

也许这是个坏主意,但我为 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()));

(如您所见,如果我要添加多个菜单项,这种单行格式更易于阅读。)


菜单项可见且文本正确,助记符和操作按预期工作。但是没有工具提示...但是,如果我只使用 JMenuItem,工具提示就可以工作!

JMenuItem about = new JMenuItem(new AboutAction());
about.setMnemonic('a');
menu.add(about);

如何让 AbstractAction 与我的 JMenuItem 子类一起工作?

最佳答案

您重写的构造函数不使用 JMenuItem 构造函数以 Action 作为参数,也不调用 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;
}

关于java - AbstractionAction 的 putValue() 方法是否适用于 JMenuItem 等的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com