我能够使用鼠标点击将焦点设置到JTable中的单个单元格,但是当使用选项卡在单元格之间移动时,下一个选定的选项卡单元格似乎突出显示,而不是聚焦。
有没有办法使用“Tab”键设置单元格的焦点?
答案 0 :(得分:4)
覆盖JTable的changeSelection()方法:
JTable table = new JTable(...)
{
// Place cell in edit mode when it 'gains focus'
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();
// ((JTextComponent)editor).selectAll();
}
}
};
答案 1 :(得分:3)
在选择时,您需要编辑单元格和请求焦点。 )另请注意,您需要为列事件和行事件添加选择侦听器。)
public static void main(String[] args) throws Exception {
final JTable t = new JTable(4, 4);
t.setCellSelectionEnabled(true);
ListSelectionListener l = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (t.editCellAt(t.getSelectedRow(), t.getSelectedColumn()))
t.getEditorComponent().requestFocus();
}
};
t.getSelectionModel().addListSelectionListener(l);
t.getColumnModel().getSelectionModel().addListSelectionListener(l);
JFrame frame = new JFrame("Test");
frame.add(t);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
}
答案 2 :(得分:3)
对我来说,方法#2出现问题,鼠标选择后的标签将焦点转移到第一列而不是下一列。我通过在super.changeSelection
声明之后调用if
来修复它。
public void changeSelection(final int row, final int column, boolean toggle, boolean extend)
{
if (editCellAt(row, column))
{
getEditorComponent().requestFocusInWindow();
}
super.changeSelection(row, column, toggle, extend);
}