Java 摆动JTextPane中的默认键绑定

Java 摆动JTextPane中的默认键绑定,java,swing,jtextpane,hotkeys,Java,Swing,Jtextpane,Hotkeys,现在我正在开发一个C IDE。因为它的主题是Motif,我的问题是如何将默认的击键(Ctrl+C-copy,Ctrl+V-paste)添加到JTextPane。在Motif L&F中,JTextPane不会对这些按键做出反应。如何使其在这些键上执行所需的操作 在Motif L&F中,JTextPane不会对这些按键做出反应。如何使其在这些键上执行所需的操作 您需要添加自己的键绑定以将操作绑定到击键 查看一个程序,列出给定LAF的任何Swing组件的现有绑定 然后,它显示了如何使用不同的按键来共享

现在我正在开发一个C IDE。因为它的主题是Motif,我的问题是如何将默认的击键(Ctrl+C-copy,Ctrl+V-paste)添加到
JTextPane
。在Motif L&F中,
JTextPane
不会对这些按键做出反应。如何使其在这些键上执行所需的操作

在Motif L&F中,JTextPane不会对这些按键做出反应。如何使其在这些键上执行所需的操作

您需要添加自己的
键绑定
以将
操作
绑定到
击键

查看一个程序,列出给定LAF的任何Swing组件的现有绑定

然后,它显示了如何使用不同的
按键来共享
操作

 KeyStroke existingKeyStroke = KeyStroke.getKeyStroke("ENTER");
 KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
 InputMap im = component.getInputMap(...);
 im.put(addedKeyStroke, im.get(existingKeyStroke));
 KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
 InputMap im = component.getInputMap(...);
 im.put(addedKeyStroke, "caret-end-word"); 
或者通过击键将绑定添加到
操作

 KeyStroke existingKeyStroke = KeyStroke.getKeyStroke("ENTER");
 KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
 InputMap im = component.getInputMap(...);
 im.put(addedKeyStroke, im.get(existingKeyStroke));
 KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
 InputMap im = component.getInputMap(...);
 im.put(addedKeyStroke, "caret-end-word"); 
我将让您运行该程序以获取要使用的现有击键或要使用的“操作名称”

上面的示例显示了如何更改单个组件的绑定。该链接还将显示如何通过访问所有文本窗格共享的
InputMap
来完成所有JTextPanes

InputMap im = (InputMap)UIManager.get("TextField.focusInputMap");
在Motif L&F中,JTextPane不会对这些按键做出反应。如何使其在这些键上执行所需的操作

您需要添加自己的
键绑定
以将
操作
绑定到
击键

查看一个程序,列出给定LAF的任何Swing组件的现有绑定

然后,它显示了如何使用不同的
按键来共享
操作

 KeyStroke existingKeyStroke = KeyStroke.getKeyStroke("ENTER");
 KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
 InputMap im = component.getInputMap(...);
 im.put(addedKeyStroke, im.get(existingKeyStroke));
 KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
 InputMap im = component.getInputMap(...);
 im.put(addedKeyStroke, "caret-end-word"); 
或者通过击键将绑定添加到
操作

 KeyStroke existingKeyStroke = KeyStroke.getKeyStroke("ENTER");
 KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
 InputMap im = component.getInputMap(...);
 im.put(addedKeyStroke, im.get(existingKeyStroke));
 KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
 InputMap im = component.getInputMap(...);
 im.put(addedKeyStroke, "caret-end-word"); 
我将让您运行该程序以获取要使用的现有击键或要使用的“操作名称”

上面的示例显示了如何更改单个组件的绑定。该链接还将显示如何通过访问所有文本窗格共享的
InputMap
来完成所有JTextPanes

InputMap im = (InputMap)UIManager.get("TextField.focusInputMap");
这可能有助于:

JTextPane.setKeymap(
  JtextPane.getKeymap().addActionForKeyStroke(
    KeyEvent.VK_V, InputEvent.CTRL_MASK,DefaultEditorKit.CopyAction));
这可能有助于:

JTextPane.setKeymap(
  JtextPane.getKeymap().addActionForKeyStroke(
    KeyEvent.VK_V, InputEvent.CTRL_MASK,DefaultEditorKit.CopyAction));

您需要了解的是,JTextPane已经捕捉到了Ctrl+C和Ctrl+V键,因此您的侦听器将永远不会收到通知

获得通知的最快方式是通过以下方式注册此操作:

myJTextPane.getActionMap().put(DefaultEditorKit.copyAction, myCopyAction);
//and
myJTextPane.getActionMap().put(DefaultEditorKit.pasteAction, myPasteAction);

您需要了解的是,JTextPane已经捕捉到了Ctrl+C和Ctrl+V键,因此您的侦听器将永远不会收到通知

获得通知的最快方式是通过以下方式注册此操作:

myJTextPane.getActionMap().put(DefaultEditorKit.copyAction, myCopyAction);
//and
myJTextPane.getActionMap().put(DefaultEditorKit.pasteAction, myPasteAction);

寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。使用链接改进您的问题-不要通过评论添加更多信息。谢谢意思是:如果你的代码不起作用-超过了该代码的最小示例。这里可能有各种各样的错误。“JTextPane不要对这些关键点做出反应。”谢谢你告诉我们。。您有问题吗?嗯,您必须实现所需的击键。@zlakad如何做到这一点?寻求调试帮助的问题(“此代码为什么不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。使用链接改进您的问题-不要通过评论添加更多信息。谢谢意思是:如果你的代码不起作用-超过了该代码的最小示例。这里可能有各种各样的错误。“JTextPane不要对这些关键点做出反应。”谢谢你告诉我们。。你有问题吗?嗯,你必须实现你想要的击键。@zlakad怎么做?