7

我需要取消 JTable 模型对象中的所有选择。据我所知,Java 提供了这个函数“clearSelection()”,它可以满足我的需要。

但我很困惑为什么可以在 JTable 对象以及 JTable 对象的选择模型上调用此函数:

 1) mytable.clearSelection();
 2) mytable.getSelectionModel().clearSelection();

两种方式都有效,但我不明白在什么情况下 SelectionModel 的 clearSelection() (如 2) )会有意义。据我了解 SelectionModels,它们用于决定 JTable 允许什么样的选择。我使用 SelectionModel 只允许选择恰好一行

//allow only one row to be selected
mytable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

在什么样的情况下首选哪种方式?有充分的理由不使用方式1吗?

如果有人对此有一些初学者友好的解释,我会很高兴。提前谢谢。

4

2 回答 2

8

这里是实现JTable#clearSelection()

public void clearSelection() {
    selectionModel.clearSelection();
    columnModel.getSelectionModel().clearSelection();
}

如您所见,有两个ListSelectionModel被清除,因为您可以选择列和/或行和/或单元格。

来自 Oracle 教程:

JTable 使用一个非常简单的选择概念,作为行和列的交集进行管理。它不是为处理完全独立的单元格选择而设计的。

处理选择的ListSelectionModel所有方面,例如选择了哪一行,我们如何选择一些行等等......不仅仅是选择的那种!Oracle JTable 教程
中的更多信息

于 2013-08-20T14:40:57.730 回答
5

通常当您看到这样的两个方法时,是因为该表会为您调用 SelectionModel.clearSelection() 方法。所以表格方法是一种方便的方法。

在这种情况下,实际代码是:

public void clearSelection() 
{
    selectionModel.clearSelection();
    columnModel.getSelectionModel().clearSelection();
}

所以行和列选择模型都被清除了。

于 2013-08-20T14:38:29.320 回答