当前位置: 首页 > 知识库问答 >
问题:

禁用JMenuItem后击键加速器不工作

戚鸿福
2023-03-14
JMenuItem item = new JMenuItem("Connect", 'C');
KeyStroke ks = KeyStroke.getKeyStroke('C', Event.CTRL_MASK);
item.setAccelerator(ks);
item.addActionListener(this);
item.setEnabled(false);  
item.setEnabled(true);

我不能再用加速器了。JMenuItem在菜单中正确地显示为已启用,我可以用鼠标单击它(我的ActionListener正常工作),但加速器不工作--所以我不能再用Ctrl+C启动“Connect”了。

你们中有谁知道这个问题是什么或者我该如何避免它吗?

其他菜单项的加速器(但没有beeing暂时禁用)正在工作。打电话时

item.getAccelerator();

下面是一个程序的小代码,它不对键击Ctrl+C做出反应,它连接到一个菜单项:

public class ProblemDemo extends JFrame implements ActionListener {

public ProblemDemo() {
    super("ProblemDemo");
    setSize(500,500);
    setLocation(500,300);

    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    JMenuBar menubar = new JMenuBar();
    JMenuItem menuItem = new JMenuItem("JMenuItem", 'C');
    menuItem.setAccelerator(KeyStroke.getKeyStroke('C', Event.CTRL_MASK));
    menuItem.addActionListener(this);
    JMenu menu = new JMenu("Actions");
    menu.add(menuItem);
    menubar.add(menu);
    setJMenuBar(menubar);

    JTextArea textarea = new JTextArea();
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(textarea, BorderLayout.CENTER);

    setVisible(true);
}

@Override
public void actionPerformed(ActionEvent event) {
    if ("JMenuItem".equals(event.getActionCommand())) {
        System.out.println("JMenuItem clicked");
    }
}

public static void main(String[] args) {
    new ProblemDemo();
}

}

共有1个答案

魏澄邈
2023-03-14

只有在通过调用ListSelectionListener中的setEnabled(true)在JTable中选择了某些内容时,我才尝试启用Copy/Cut菜单项(以及工具栏中的按钮)时遇到了同样的问题。

我通过在每次调用setEnable(true)时为包含这些项的JMenuBar调用requestFocusInWindow来解决我的问题。

似乎选择表中的某些内容会将Ctrl+C/Ctrl+X指向表...

 类似资料:
  • 对于我的摆动应用程序,的加速器设置如下: 当GUI初始化时,这会使菜单项旁边的文本为“Ctrl Shift 3”,但当然意图是文本为“Ctrl#”。我怎么做?

  • 尝试运行,你能帮我解决吗? 线程“main”java.lang.NoClassDefFoundError:无法初始化类org.codehaus.groovy.reflection。org.codehaus.groovy.runtime.dgmimpl.NumberNumberMetaMethod.java:33上的ReflectionCache位于java.base/jdk.internal.re

  • 问题内容: 我向这样的工具栏添加菜单: 基本上,它工作正常。但是,它永远不会显示工具提示(“添加新项”)。有什么提示吗? 编辑:以防万一遇到相同问题的人偶然发现:这是L&F,正如我从一开始就应该怀疑的那样。它具有显示JMenuItems工具提示的属性;并且默认为false。 问题答案: 下面的sscce可以正常工作。如果您仍然有问题,请编辑问题,以包含显示您所描述问题的示例。 附录:我将添加到,它

  • 我在tomcat上配置了ssl,在IE上禁用了tls支持,并启用了ssl支持,但我仍然得到错误消息 Tomcat设置

  • 我有一个简单的地图减少工作,我正在建立反向索引。 我的映射器工作正常(我检查过了),并输出了word和docID:TFIDF值的密钥对: 映射器(仅显示输出): 化简器的唯一工作是组合这些值。这是我的实现: 然而,它没有组合任何东西,输出看起来基本上与来自映射器的相同。输出中有一些行具有相同的键,尽管reducer应该将它们组合起来——基本上,使用reducer时,输出文件中的所有键都应该是唯一的

  • 介绍 (Introduction) JMenuItem类表示菜单中的实际项目。 菜单中的所有项都应该来自JMenuItem类或其子类之一。 默认情况下,它包含一个简单的标签菜单项。 Class 声明 (Class Declaration) 以下是javax.swing.JMenuItem类的声明 - public class JMenuItem extends AbstractButton