我有许多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 是不够的,因为按键不会继续传递。
getTableCellEditorComponent
requestFocusInWindow
在此处和此处查看一些相关文章。
另一个关于JTable编辑的好文章。