Java JTable setRowSelectionInterval对JButton无效

Java JTable setRowSelectionInterval对JButton无效,java,swing,jtable,selection,Java,Swing,Jtable,Selection,在某些情况下,my Table Model setValueAt方法使用JTable,使用setRowSelectionInterval和setColumnSelectionInterval将选择移动到下一行。当用户在默认单元格编辑器中键入单元格并点击选项卡来调用它时,代码起作用:所需的下一个单元格被选中,即下一行的第一个单元格 但是,如果用户使用Return而不是Tab提交编辑,则不会进行选择;而是选择下面的单元格。我没问题 我还有一个按钮来清除一行。按钮的action函数为所需单元格调用模型

在某些情况下,my Table Model setValueAt方法使用JTable,使用setRowSelectionInterval和setColumnSelectionInterval将选择移动到下一行。当用户在默认单元格编辑器中键入单元格并点击选项卡来调用它时,代码起作用:所需的下一个单元格被选中,即下一行的第一个单元格

但是,如果用户使用Return而不是Tab提交编辑,则不会进行选择;而是选择下面的单元格。我没问题

我还有一个按钮来清除一行。按钮的action函数为所需单元格调用模型的setValueAt函数。不幸的是,setRowSelectionInterval和setColumnSelectionInterval方法没有明显的效果;而是不选择任何单元格

我尝试了table.requestFocusInWindow和table.getParent.requestFocusInWindow,以及table.changeSelectionrow、0、false、false,但都没有明显效果

在我着手建造SSCCE之前,这里有什么基本的东西我遗漏了吗

如果重要,以下是容器层次结构:

parent JPanel
  button rows JPanel
    button row 1 JPanel
    button row 2 JPanel
  table JScrollpane
    JTable
有问题的按钮位于按钮行1中

谢谢

也许您可以使用来侦听对表的编辑。它侦听JTable编辑器所做的实际更改

然后在提供的操作中,您可以选择适当的行。您可能需要将操作代码包装在SwingUtilities.invokeLater中。。。确保代码在表完全编辑完成后执行。

也许您可以使用来侦听对表的编辑。它侦听JTable编辑器所做的实际更改


然后在提供的操作中,您可以选择适当的行。您可能需要将操作代码包装在SwingUtilities.invokeLater中。。。为了确保代码在表格编辑完成后执行。

如果这是我的问题,我需要帮助,我会创建并发布一个,希望通过提供演示问题的最小程序,有人能够找到解决方案。在我开始构建SSCCE之前?建立SSCCE并不麻烦。它是一种解决问题的工具,您应该始终创建它,以确保您理解问题。顺便说一下,TableModel不应该更改表的选择,因此您不应该重写setValueAt方法。TableModel只管理数据,视图处理选择。似乎您可以调用selectNextRow操作,正如滚动操作所建议的那样。@camickr:我很困惑,因为我认为您希望覆盖setValueAt。。。如果表格单元格是可编辑的,则表格模型不应调用setRowSelectionInterval。。。在TableModel中,因为这将修改表的视图。至少我是这样理解模型和视图的分离的。如果这是我的问题,我需要帮助,我会创建并发布一个,希望通过提供演示问题的最小程序,有人能够找到解决方案。在我开始构建SSCCE之前?建立SSCCE并不麻烦。它是一种解决问题的工具,您应该始终创建它,以确保您理解问题。顺便说一下,TableModel不应该更改表的选择,因此您不应该重写setValueAt方法。TableModel只管理数据,视图处理选择。似乎您可以调用selectNextRow操作,正如滚动操作所建议的那样。@camickr:我很困惑,因为我认为您希望覆盖setValueAt。。。如果表格单元格是可编辑的,则表格模型不应调用setRowSelectionInterval。。。在TableModel中,因为这将修改表的视图。至少这就是我对模型和视图分离的理解。谢谢!实际上,仅在setValueAt中使用invokeLater会导致症状消失,但如上所述,这不是正确的解决方案。问题是,我把马放在车里了!谢谢实际上,仅在setValueAt中使用invokeLater会导致症状消失,但如上所述,这不是正确的解决方案。问题是,我把马放在车里了!