【问题标题】:Swing. Default keybindings in JTextPane摇摆。 JTextPane 中的默认键绑定
【发布时间】:2018-07-14 00:03:21
【问题描述】:

现在我正在使用 C IDE。因为它的主题是 Motif,我的问题是如何将默认 KeyStroke(Ctrl + C - 复制,Ctrl + V - 粘贴)添加到JTextPane。在 Motif L&F 中,JTextPane 不会对这些按键做出反应。如何让它对这些键执行所需的操作。

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建 minimal reproducible example。使用edit 链接改进您的问题 - 不要通过 cmets 添加更多信息。谢谢!
  • 含义:如果您的代码无法正常工作 - 通过该代码的最小示例。这里可能有各种各样的错误。
  • “JTextPane 不会对这些按键反应做出反应。” 感谢您告诉我们。 ..你有问题吗?
  • 好吧,你必须实现所需的击键。
  • @zlakad 怎么做?

标签: java swing jtextpane hotkeys


【解决方案1】:

你要明白的是,KeyStrokes Ctrl + C 和 Ctrl + V 已经被 JTextPane 捕捉到了,所以你的监听器永远不会被通知。

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

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

【讨论】:

    【解决方案2】:

    这可能会有所帮助:

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

    【讨论】:

      【解决方案3】:

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

      您需要添加自己的Key Bindings 以将Action 绑定到KeyStroke。

      查看Key Bindings 的程序以列出给定 LAF 的任何 Swing 组件的现有绑定。

      然后显示如何与不同的KeyStroke 共享Action:

       KeyStroke existingKeyStroke = KeyStroke.getKeyStroke("ENTER");
       KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("control Z");
       InputMap im = component.getInputMap(...);
       im.put(addedKeyStroke, im.get(existingKeyStroke));
      

      或者使用KeyStroke 将绑定添加到Action:

       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");
      

      【讨论】:

        猜你喜欢
        • 2013-06-27
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多