2013-08-20 70 views
6

我需要取消JTable模型對象中的所有選擇。據我所知,Java提供了這個函數「clearSelection()」,它可以滿足我的需求。JTable.clearSelection()vs Jtable.getSelectionModel.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提前。

+0

也許它在調用table.clearSelection()時使用默認模型,但這只是一個猜測! – Fernando

回答

7

這裏是JTable#clearSelection()

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

執行正如你所看到的,在兩個ListSelectionModel被清除,因爲你可以選擇列和/或行和/或細胞。

從甲骨文教程:

JTable使用一個非常簡單的選擇的概念,管理按行和列的交叉點 。它沒有被設計成完全處理 獨立單元格選擇。

一個ListSelectionModel手柄選擇的所有方面,如被選中的行,我們怎麼能選擇一些行,等等......不僅種類選擇的!
更多信息the Oracle JTable tutorial

+0

謝謝你的解釋。所以如果我對你有所瞭解,selectionModel.clearSelection()將清除行和columnModel.getSelectionModel()的選擇。clearSelection()清除列的選擇,以便兩者一起清除單元格上的選擇,是否正確? 因爲你的完美感覺,調用mytable.clearSelection()將被優先選擇mytable.getSelectionModel()。clearSelection(),因爲它做了更廣泛的清理。 感謝您提供關於ListSelectionModel的提示。 – Simeon

+0

@Simeon它應該是這樣的,除了我認爲只清除列(或行)的選擇足以取消選擇一個單元格。 (如果沒有選擇行,可以選擇一個單元格,與列相同的推理)。很高興有幫助;) – NiziL

5

通常當你看到兩種方法時,這是因爲表格會爲你調用SelectionModel.clearSelection()方法。所以表格方法是一種方便的方法。

在這種情況下,實際的代碼是:

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

所以行和列選擇模型都將被清除。

相關問題