2011-10-05 58 views
1

我想:JTable中:在选项卡中选择下一个单元格,但首先重点选择相同的细胞,而不是下一个

  • 有一个按钮添加一行到一个JTable
  • 在创建该行,给它焦点并开始编辑第一列
  • 当用户按下Tab键时,选择下一列。

对于添加按钮,我这样做:

add_button.addActionListener(new java.awt.event.ActionListener() { 
    @Override 
    public void actionPerformed(java.awt.event.ActionEvent evt) { 
     int row = table_model.addRow(); 
     table.setRowSelectionInterval(row, row); 
     table.scrollRectToVisible(table.getCellRect(row, 0, true)); 
     table.editCellAt(row, 0); 
     table.transferFocus(); 
     did_add = true; 
    } 
}); 

这确实导致表单元格采取集中并开始编辑。为了确保按Tab键选择下一个单元格,我有这样的:

table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0, false), "selectNextColumnCell"); 

这里是我的问题:

  • 如果我以前所做的任何细胞的选择,这完美的作品。我可以编辑第一列,然后按Tab键,这会导致选择下一列。
  • 但是,如果是新创建该表或表外的一些小部件以前有重点,我点击我的Add按钮,然后出现这种情况:
    • 第一列是正确选择,是编辑
    • 当我按下Tab键,通常在同一小区的重点是
    • 我必须按Tab第二次去到下一列
    • 有时,第一个选项卡实际上进入细胞0,0

因此,它似乎是,虽然小区集中和正在编辑的东西是歪与表的焦点,因为它是不正确哪些细胞是下一个。

我曾尝试包括设置焦点表中的几个变通,但似乎没有工作(requestFocus的,requestFocusInWindow,设置表的选择等)。

任何想法如何解决这一问题?

回答

1

发生这种情况是因为列选择是而不是通过设置表格的行选择进行更改:在启动时未选中,然后导航到下一列(又名:从编辑中脱离出来)将其设置为第一列。要解决,设置列选择以及行选择

table.setRowSelectionInterval(row, row); 
    table.setColumnSelectionInterval(0, 0); 
+0

谢谢!这解决了问题! –

相关问题