我有很多针对JTable的自定义编辑器,并且认为可用性,特别是关于使用键盘编辑的可用性是缺乏的,这是轻描淡写的.
这样做的主要原因是我的编辑器总是创建一个类似的(虽然通常更复杂)的情况:
@Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { JPanel container = new JPanel(); container.setLayout(new BorderLayout()); container.add(field, BorderLayout.CENTER); field.setText((String) value); container.add(new JButton("..."), BorderLayout.EAST); return container; }
IE是一个内部有多个组件的面板.实际的文本编辑器是作为编辑器返回的组件的后代.所以,从我所知的问题来看,除了渲染问题之外,JTable正在关注getTableCellEditorComponent
方法返回的组件,因此当您按下一个突出显示单元格的键时,它会通过焦点并按下按键到面板,认为是编辑器.
无论如何我可以通知JTable"真正的"编辑器是JTextfield吗?requestFocusInWindow
在正确的组件上添加hacky 是不够的,因为按键不会被传递.