Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 做抽象动作';s putValue()方法是否可以处理JMenuItem等的子类?_Java_Swing - Fatal编程技术网

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;
}