gpt4 book ai didi

java - 禁用 JMenuItem 后 KeyStroke 加速器不工作

转载 作者:行者123 更新时间:2023-12-01 13:15:28 26 4
gpt4 key购买 nike

在带有 Swing GUI 的小型 Java 独立程序中,我将 JMenuItem 与 A​​ccelerator 一起使用 - 基本上没有任何问题:

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 启动“连接” em>不再了。

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

<小时/>

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

item.getAccelerator();

调用item.setEnabled(true)后,我得到了以前设置的KeyStroke。

它适用于按键 Ctrl+U,但不适用于 Ctrl+C。在我看来,当禁用菜单项时,默认复制操作会再次使用 Ctrl+C 注册,并且再次启用菜单项后,KeyStroke 和菜单项之间不再有任何连接。

在尝试构建我的程序的一个小副本来演示我遇到的问题时:
我一起做了两件事 - 启用 JMenuItem(使用 KeyStroke Ctrl+C)并请求 JTextField 的焦点。

<小时/>

下面是一个程序的小代码,它不会对连接到菜单项的 KeyStroke Ctrl+C 使用react:

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

}

最佳答案

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

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

似乎在表中选择某些内容会将 Ctrl+C/Ctrl+x 定向到表...

也许会有帮助

关于java - 禁用 JMenuItem 后 KeyStroke 加速器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22507505/

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