Ниже приведена моя пользовательская логика для перехода к следующей редактируемой ячейке. Добавляет строку автоматически при вкладке из определенного столбца.
Что отлично работает:
Когда добавляется новая строка, фокус автоматически попадает на первую строку следующего столбца, поэтому, когда я начинаю печатать, он печатает из первого столбца следующей строки.
Что мне нужно:
Выделите ячейку в фокусе, чтобы пользователь знал, что фокус находится на первом столбце следующей строки. В настоящий момент, хотя он правильно вводит данные в ячейку, мы не видим, что она указывает на эту ячейку.
Примечание:
Я сделал это table.cellSelectionEnabled(true);
и до сих пор не работает.
InputMap im = itemTable.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
final Action oldTabAction = itemTable.getActionMap().get(im.get(tab));
Action tabAction = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
oldTabAction.actionPerformed( e );
JTable table = (JTable)e.getSource();
int rowCount = table.getRowCount();
int columnCount = table.getColumnCount();
int row = table.getSelectedRow();
int column = table.getSelectedColumn();
FLItemRuleInfo itemRuleInfo = itemTableModel.getItemRuleInfoList().get(row);
while (! itemTableModel.isCellEditable(row, column) )
{
if((itemRuleInfo.getItem()==null || itemRuleInfo.getItem().getItemId()==null || itemRuleInfo.getItem().getItemId().isEmpty())){
column=1;
break;
}
column += 1;
if (column == columnCount)
{
column = 1;
row +=1;
}
/* if (row == rowCount)
{
row = 0;
}*/
if (row == table.getSelectedRow()
&& column == table.getSelectedColumn())
{
break;
}
}
table.changeSelection(row, column, false, false);
if(column==8 && (row == rowCount-1) && itemRuleInfo.getItem()!=null){
itemTableModel.addRow(new FLItemRuleInfo());
}
}
};
itemTable.getActionMap().put(im.get(tab), tabAction);