我正在尝试在JFrame中实现具有拆分窗格的热键,该窗格在其中一个窗格上具有JTree。键绑定工作得很好,除了当用户正在编辑JTree节点的名称时,如果他们按下具有键绑定的键,则在文本区域和中键入击键会触发键绑定。关于如何允许编辑节点的任何想法,同时仍然实现热键?
以下是演示该行为的示例。 " 1"和" 2"键是绑定的,因此如果您在文本区域中键入任一键,您将看到弹出窗口。
sprite.addCoordinate(...)
答案 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();
}
}
你可能需要考虑听众的顺序(就像我说的那样,已经有一段时间了。)