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

时间:2013-08-20 14:25:48

标签: java swing jtable selection selectionmodel

我需要取消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?

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

2 个答案:

答案 0 :(得分:7)

以下是JTable#clearSelection()

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

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

来自Oracle教程:

  

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

ListSelectionModel处理选择的所有方面,例如选择哪一行,我们如何选择某些行等...不仅仅是选择的种类!
the Oracle JTable tutorial

中的更多信息

答案 1 :(得分:5)

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

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

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

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