我希望输入键在JTable上像tab键一样工作。 我知道这个问题已经问了好几次,我使用了这个页面中的解决方案:Use Enter Key Act Like Tab Key on jTable。
KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(enter, im.get(tab));
解决方案就像魅力一样。但是当使用tab键时,我覆盖了JTable的changeSelection,并覆盖单元格编辑器的getTableCellEditorComponent以在下一个单元格的textField中选择所有文本:
在JTable中
@Override
public void changeSelection(int row, int column, boolean toggle, boolean extend) {
super.changeSelection(row, column, toggle, extend);
if (editCellAt(row, column)) {
Component editor = getEditorComponent();
editor.requestFocusInWindow();
}
}
在CellEditor中
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
if (isSelected ) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
textField.selectAll();
}
});
}
return super.getTableCellEditorComponent(
table, value, isSelected, row, column);
}
因此,当我按Tab键时,下一个单元格被聚焦并且其中的文本被选中,但是当我键入enter键时,第一次单元格松散焦点,第二次进入下一个单元格获得焦点和文本在它中被选中。
所以我的问题是:有没有办法让第一个从单元格输入松散焦点并获得下一个焦点(所以它的行为与tab键完全相同)
答案 0 :(得分:0)
不知道它是否会有所作为,但我只是覆盖了changeSelection(...)方法来进行单元格选择:
if (editCellAt(row, column))
{
Component editor = getEditorComponent();
editor.requestFocusInWindow();
((JTextComponent)editor).selectAll();
}
发布显示问题的SSCCE,如果没有帮助的话。