如何防止在TextArea中键入也会触发键绑定?

时间:2017-10-24 19:54:50

标签: java swing jtextarea key-bindings

我正在尝试在JFrame中实现具有拆分窗格的热键,该窗格在其中一个窗格上具有JTree。键绑定工作得很好,除了当用户正在编辑JTree节点的名称时,如果他们按下具有键绑定的键,则在文本区域中键入击键会触发键绑定。关于如何允许编辑节点的任何想法,同时仍然实现热键?

以下是演示该行为的示例。 " 1"和" 2"键是绑定的,因此如果您在文本区域中键入任一键,您将看到弹出窗口。

sprite.addCoordinate(...)

2 个答案:

答案 0 :(得分:3)

这就是为什么通常热键具有Alt或Control修饰符的原因。

您可以修改操作以确定哪个组件具有焦点:

@Override
public void actionPerformed(ActionEvent e)
{
    KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
    Component focusedComponent = kfm.getFocusOwner();

    if (focusedComponent instanceof JTextArea)
        return;

    JOptionPane.showMessageDialog(panel, "You pressed a button \n"+e.paramString());
}

答案 1 :(得分:0)

自从我完成Swing以来已经有一段时间了,但我认为你可以在ActionEvent上调用consume()来防止它被传递给其他侦听器。即,如果在按键击中其他听众之前调用消费,则可以防止数字显示在字段中。

澄清:

public class ButtonAction extends AbstractAction
{
    private static final long serialVersionUID = 1L;

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        JOptionPane.showMessageDialog(panel, "You pressed a button \n"+e.paramString());
        e.consume();
    }
}

你可能需要考虑听众的顺序(就像我说的那样,已经有一段时间了。)