我正在编写一个包含菜单,工具栏和表格的swing应用程序。
我已将 CTRL + W 等各种关键笔划映射到特定操作。这些都可以正常工作,除了 CTRL + V , CTRL + C 和 CTRL + X 。 我希望能够剪切或复制行,然后将它们粘贴到表格中。
单击按钮时功能本身工作正常,但使用键盘快捷键不会触发这3个特定事件。 JTable是否可能默认捕获它们?如果是这样,我该如何禁用此行为?
行动声明:
ExampleAction editCopy = new ExampleAction();
editCopy.putValue(Action.NAME, "Copy");
editCopy.putValue(Action.SMALL_ICON, ClientUtil.getImageResource("copy.gif"));
editCopy.putValue(Action.SHORT_DESCRIPTION, "Copy the selected row(s)");
editCopy.putValue(Action.MNEMONIC_KEY, new Integer('C'));
editCopy.putValue(Action.ACCELERATOR_KEY,
KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK));
将操作添加到菜单和工具栏:
JMenu menu = new JMenu();
JMenuItem menuItem = new JMenuItem(editCopy);
KeyStroke accKey = (KeyStroke) editCopy.getValue(Action.ACCELERATOR_KEY);
menuItem.setAccelerator(accKey);
menu.add(menuItem);
JToolBar toolbar = new JToolBar();
JButton button = new JButton(editCopy);
toolbar.setText("");
toolbar.add(button);
我没有对JTable做任何特别的事。
答案 0 :(得分:4)
更深层解决方案的概述:
这些键是默认的粘贴/复制/剪切笔划,它们已经在表格的action / inputMap中绑定到TableTransferHandler提供的操作...粘贴/复制/剪切:-)。
由于您希望实施这些操作,任务有两方面:
以下是原件,已被接受; - )
表中捕获复制/粘贴/剪切绑定的部分(树,列表相同)是由他们的ui代表安装的TransferHandler。
我想到的一个快速解决方案是使处理程序无效:
table.setTransferHandler(null);
更深入的解决方案会尝试挂钩transferHandler,见上文。
答案 1 :(得分:3)
我会使用Key Bindings作为键组合。