2010-01-20 18 views
3

的選擇上點擊一個按鈕,我想選擇的行反轉(非選擇行應選擇和選擇的行應該是非選擇)。反轉JTable中

有JTable中內置的方法來做到這一點?

+0

添加您的解決方案作爲一個答案進行表決了:d – 2010-03-16 09:30:07

回答

2

JTable中似乎並不具備這樣做的內置方式。所以我用下面的代碼實現了它。 (希望這是誰正面臨着類似的問題有人幫助。)

int[] selectedIndexs = jtable.getSelectedRows(); 
jtable.selectAll(); 

for (int i = 0; i < jtable.getRowCount(); i++) { 
    for (int selectedIndex : selectedIndexs) { 
     if (selectedIndex == i) { 
      jtable.removeRowSelectionInterval(i, i); 
      break; 
     } 
    } 
} 
0

JTable中不具有該功能

2

爲了簡化Sudar的解決方案:

int[] selectedIndices = table.getSelectedRows(); 
table.selectAll(); 
for (int prevSel : selectedIndices) { 
    table.removeRowSelectionInterval(prevSel, prevSel); 
} 
+2

注意,在更大的表的情況下,即ListSelectionModel的valueIsAdjusting屬性幫助有點表現。 – Touko 2011-10-21 05:30:58

0

細化以上是使用選擇模型對象,而不是更新的選擇表對象。當您通過表格更新選擇時,每次更新都會觸發選擇更改事件,並且只需幾秒鐘即可更新僅有幾百行的表格。

與超過幾百行的多個表,最快的方法是這樣的

/** 
* Invert selection in a JTable. 
* 
* @param table 
*/ 
public static void invertSelection(JTable table) { 
    ListSelectionModel mdl = table.getSelectionModel(); 
    int[] selected = table.getSelectedRows(); 
    mdl.setValueIsAdjusting(true); 
    mdl.setSelectionInterval(0, table.getRowCount() - 1); 
    for (int i : selected) { 
     mdl.removeSelectionInterval(i, i); 
    } 
    mdl.setValueIsAdjusting(false); 
}