Java 捕获DefaultCellEditor组件的关键事件

Java 捕获DefaultCellEditor组件的关键事件,java,swing,jtable,keyboard-events,tablecelleditor,Java,Swing,Jtable,Keyboard Events,Tablecelleditor,当它写入一个JTable的单元格时,如果没有该单元格,则处于编辑状态。即,当它以蓝色背景色显示时。单元格将进入编辑模式,写入的文本显示在编辑器组件的当前文本末尾(aTextField) 但是,在此状态下,DefaultCellEditor的TextField仍然没有焦点。关键事件不属于文本字段 这些关键事件的接收者是什么? 如何捕获这些关键事件?在编辑器组件获得焦点之前接收事件的组件是JTable本身 JTable通过processKeyBinding方法通过键绑定将键事件传递给所选单元格的编辑

当它写入一个
JTable
的单元格时,如果没有该单元格,则处于编辑状态。即,当它以蓝色背景色显示时。单元格将进入编辑模式,写入的文本显示在编辑器组件的当前文本末尾(a
TextField

但是,在此状态下,
DefaultCellEditor
TextField
仍然没有焦点。关键事件不属于文本字段

这些关键事件的接收者是什么?
如何捕获这些关键事件?

在编辑器组件获得焦点之前接收事件的组件是JTable本身

JTable通过processKeyBinding方法通过键绑定将键事件传递给所选单元格的编辑器组件。 因此,不会通知关键事件侦听器

我的问题是,我的自定义编辑器没有processKeyBinding,因为它是一个JPanel(组合编辑器)。然后关键事件就丢失了

解决方案是使用带有puclic函数的自定义TextField传递processKeyBinding操作,以实现此功能

public class KeyBindingTextField extends JTextField {
    protected boolean processKeyBindingPublic(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
        return super.processKeyBinding(ks, e, condition, pressed);
    }  
}
然后,我将键绑定方法从JPanel传递到TextField,以便:

  protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
     return TextField.processKeyBindingPublic(ks, e, condition, pressed);
  }

你为什么要抓住关键事件?