摇摆。 JTextPane

时间:2018-02-03 18:10:04

标签: java swing jtextpane hotkeys

现在我在使用C IDE。因为它的主题是Motif,我的问题是如何将默认的KeyStroke(Ctrl + C - copy,Ctrl + V - paste)添加到JTextPane。在Motif L& F中,JTextPane对这些KeyStrokes没有反应。如何使它对这些键执行所需的操作。

3 个答案:

答案 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));