现在我在使用C IDE。因为它的主题是Motif,我的问题是如何将默认的KeyStroke(Ctrl + C - copy,Ctrl + V - paste)添加到JTextPane
。在Motif L& F中,JTextPane
对这些KeyStrokes没有反应。如何使它对这些键执行所需的操作。
答案 0 :(得分:2)
您必须了解的是,KeyStrokes Ctrl + C和Ctrl + V已经被JTextPane捕获,因此您的监听器将永远不会得到通知。
获得通知的最快方式是通过以下方式注册此操作:
myJTextPane.getActionMap().put(DefaultEditorKit.copyAction, myCopyAction);
//and
myJTextPane.getActionMap().put(DefaultEditorKit.pasteAction, myPasteAction);
答案 1 :(得分:1)
在Motif L& F中,JTextPane对这些KeyStrokes没有反应。如何使它对这些键执行所需的操作。
您需要添加自己的Key Bindings
以将Action
绑定到KeyStroke
。
查看Key Bindings程序,列出给定LAF的任何Swing组件的现有绑定。
然后会显示如何与Action
分享KeyStroke
:
KeyStroke existingKeyStroke = KeyStroke.getKeyStroke("ENTER");
KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
InputMap im = component.getInputMap(...);
im.put(addedKeyStroke, im.get(existingKeyStroke));
或者使用Action
KeyStroke
添加绑定
KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
InputMap im = component.getInputMap(...);
im.put(addedKeyStroke, "caret-end-word");
我允许您运行程序以使用现有的KeyStroke或"操作名称"使用。
上面的示例显示了如何更改单个组件的绑定。该链接还将显示如何通过访问所有文本窗格共享的InputMap
来完成所有JTextPanes。
InputMap im = (InputMap)UIManager.get("TextField.focusInputMap");
答案 2 :(得分:1)
这可能有所帮助:
JTextPane.setKeymap(
JtextPane.getKeymap().addActionForKeyStroke(
KeyEvent.VK_V, InputEvent.CTRL_MASK,DefaultEditorKit.CopyAction));