テーブルの最後のセルでタブキーが押されたときに、最初の行に戻るという JTable のデフォルトの動作を無効にするにはどうすればよいですか? 代わりに、現在のセルがフォーカスを維持する必要があります。
質問する
1063 次
1 に答える
6
簡単な答え: タブにバインドされているアクションを見つけ、最後のセルにない場合にのみ元のアクションに委任するカスタム アクションにラップし、元のアクションをカスタム実装に置き換えます。
コード内:
KeyStroke keyStroke = KeyStroke.getKeyStroke("TAB");
Object actionKey = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.get(keyStroke );
final Action action = table.getActionMap().get(actionKey);
Action wrapper = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JTable table = (JTable) e.getSource();
int lastRow = table.getRowCount() - 1;
int lastColumn = table.getColumnCount() -1;
if (table.getSelectionModel().getLeadSelectionIndex() == lastRow
&& table.getColumnModel().getSelectionModel()
.getLeadSelectionIndex() == lastColumn) {
return;
}
action.actionPerformed(e);
}
};
table.getActionMap().put(actionKey, wrapper);
于 2013-07-10T15:38:52.473 に答える