观察::
每当用户到达表格中的最后一个单元格并按Tab键时,焦点就会转移到第一个单元格,即表格顶部。
通过使用函数 table.scrollRectToVisible(rect)将表格视图带回到最后一个单元格,但是由于这种情况,存在移动并且看起来表格值中存在错误更改。
场景::如果我将make Scroll窗格设置为静态在特定位置,以便我可以控制移动。怎么能让这成为可能......
提前谢谢你......
答案 0 :(得分:4)
基本方法是将表的默认导航操作包装到自定义Action中,该Action检查当前单元格:如果它是最后一个,则不执行任何操作,否则执行包装操作
代码示例:
Object key = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.get(KeyStroke.getKeyStroke("ENTER"));
final Action action = table.getActionMap().get(key);
Action custom = new AbstractAction("wrap") {
@Override
public void actionPerformed(ActionEvent e) {
// implement your prevention logic
// here: don't perform if the current cell focus is the very cell of the table
int row = table.getSelectionModel().getLeadSelectionIndex();
if (row == table.getRowCount() - 1) {
int column = table.getColumnModel().getSelectionModel().getLeadSelectionIndex();
if (column == table.getColumnCount() -1) {
// if so, do nothing and return
return;
}
}
// if not, call the original action
action.actionPerformed(e);
}
};
table.getActionMap().put(key, custom);