Swing JTable:选择选项卡上的下一个单元格,但第一个焦点选择相同的单元格,而不是下一个

Swing JTable:选择选项卡上的下一个单元格,但第一个焦点选择相同的单元格,而不是下一个,swing,focus,jtable,edit,next,Swing,Focus,Jtable,Edit,Next,我想: 使用按钮将行添加到JTable 创建该行后,将其设置为焦点并开始编辑第一列 当用户按Tab键时,选择下一列 对于“添加”按钮,我执行以下操作: add_button.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { int row = table_m

我想:

  • 使用按钮将行添加到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键,这样就可以选择下一列
  • 但是,如果此表是新创建的,或者该表之外的某个小部件以前具有焦点,并且我单击我的添加按钮,则会发生以下情况:
    • 第一列已正确选择且可编辑
    • 当我按Tab键时,通常会聚焦同一单元格
    • 我必须再次按Tab键才能转到下一列
    • 有时,第一个选项卡实际上会转到单元格0,0
因此,尽管单元格已聚焦并正在编辑,但表的焦点似乎有问题,因为下一个单元格不正确

我尝试了一些涉及将焦点设置到表的变通方法,但似乎都不起作用(requestFocus、requestFocusInWindow、设置表选择等)


知道如何解决这个问题吗?

因为列选择没有通过设置表的行选择而改变:启动时,它是未选择的,然后导航到下一列(也称为:将已编辑的列禁用),将其设置为第一列。要解决此问题,请设置列选择和行选择

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

这是因为列选择不会通过设置表的行选择来更改:启动时未选中该列,然后导航到下一列(也称为:禁用已编辑的列)将其设置为第一列。要解决此问题,请设置列选择和行选择

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

谢谢这解决了问题!谢谢这解决了问题!