JTable.clearSelection()vs Jtable.getSelectionModel.clearSelection() - 何时使用什么?

Sim*_*eon 6 java swing jtable selectionmodel selection

我需要取消JTable模型对象中的所有选择.Java提供了这个函数"clearSelection()",根据我的理解,这就是我所需要的.

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

 1) mytable.clearSelection();
 2) mytable.getSelectionModel().clearSelection();
Run Code Online (Sandbox Code Playgroud)

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

//allow only one row to be selected
mytable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Run Code Online (Sandbox Code Playgroud)

哪种方式在哪种情况下首选?是否有充分的理由不使用方式1?

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

Niz*_*ziL 7

这是执行 JTable#clearSelection()

public void clearSelection() {
    selectionModel.clearSelection();
    columnModel.getSelectionModel().clearSelection();
}
Run Code Online (Sandbox Code Playgroud)

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

来自Oracle教程:

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

一个ListSelectionModel手柄选择的所有方面,如被选中的行,我们怎么能选择一些行,等等......不仅种类选择的!Oracle JTable教程
更多信息


cam*_*ckr 5

通常,当您看到两个类似的方法时,因为该表将为您调用SelectionModel.clearSelection()方法.所以表方法是一种方便的方法.

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

public void clearSelection() 
{
    selectionModel.clearSelection();
    columnModel.getSelectionModel().clearSelection();
}
Run Code Online (Sandbox Code Playgroud)

因此,行和列选择模型都被清除.