gpt4 book ai didi

java - 复制粘贴快捷方式仅适用于 OSX Java 应用程序中的 ctrl 键

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:05 27 4
gpt4 key购买 nike

我在 OSX 上使用 Netbeans 8.1 创建了一个小应用程序,执行以下步骤:

  • 我使用类别“Swing GUI 表单”创建了一个新的 JForm
  • 我向其中添加了三个菜单:

enter image description here

  • 我添加了一个带有文本字段的 JDialog,并将其链接到第三个菜单(“TAnalyse”)。

在这个 JDialog 中,我需要文本字段的复制/粘贴功能。问题是:复制/粘贴仅适用于此对话框中的“ctrl”+“c”、“x”或“v”,不适用于 osx 标准“cmd”键。

我试图将以下代码行添加到 JForm 的构造函数中,但没有成功:

KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());

附加信息:我正在使用 JDK7 和 OSX Yosemite。外观和感觉就是“Nimbus”。其他两个菜单("file"、“编辑”)尚未实现。

你能给出一个解决方案的提示吗?

更新:我使用 Netbeans GUI 构建器(Swing GUI Forms -> JDialog)创建了另一个小示例。我刚刚向 JFrame 添加了一个菜单栏,并在 GUI 构建器中添加了一个 JMenuItem。根据下面答案的评论,我手动向构造函数添加了一些代码:

public NewJDialogGUI(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();

AbstractAction copyAction = new DefaultEditorKit.CopyAction();
copyAction.putValue(Action.ACCELERATOR_KEY,KeyStroke.getKeyStroke(KeyEvent.VK_C, MASK));

this.jMenuItem1.setAction(copyAction);
this.jMenuItem1.setText("Copy");
this.jMenuItem1.setMnemonic(KeyEvent.VK_C);
}

结果是:

enter image description here

更新 2:我使用 Netbeans GUI 构建器创建了另一个小示例(Swing GUI 表单 -> 应用程序示例表单)。

结果是:

enter image description here

最后,我使用 Netbeans(空 Java 文件)创建了一个示例,源代码根据以下答案稍作修改。

结果是:

enter image description here

最佳答案

Java 使用 Actions封装功能和Key Bindings响应用户键入的键。在此示例中,DefaultEditorKit操作 CopyAction 用作菜单项的 Action。它将用户的选择从焦点文本组件复制到剪贴板。使用 Toolkit.getMenuShortcutKeyMask()获得正确的加速器,如讨论的那样here .

image

import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.text.DefaultEditorKit;

/**
* @see https://stackoverflow.com/a/34830519/230513
*/
public class MenuTest {

private static final int MASK
= Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();

private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Edit");
menu.setMnemonic(KeyEvent.VK_E);
JMenuItem menuItem = new JMenuItem();
AbstractAction copyAction = new DefaultEditorKit.CopyAction();
copyAction.putValue(Action.ACCELERATOR_KEY,
KeyStroke.getKeyStroke(KeyEvent.VK_C, MASK));
menuItem.setAction(copyAction);
menuItem.setText("Copy");
menu.add(menuItem);
menuBar.add(menu);
f.setJMenuBar(menuBar);
f.add(new JTextField(10));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new MenuTest()::display);
}
}

关于java - 复制粘贴快捷方式仅适用于 OSX Java 应用程序中的 ctrl 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767520/

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