2015-09-27 48 views
1

即使在已選擇的單元格上使用JTable(除了使用MouseListener以外),是否有任何方法可以監聽單元格選擇?在已選擇的單元上監聽JTable的選擇


我有一個行和列偵聽器的JTable。當選擇已經選擇的單元格時,聽衆都不會觸發:

JTable table() { 
    JTable table = new JTable(10, 10); 
    table.getSelectionModel().addListSelectionListener(rowListener); 
    table.getColumnModel().getSelectionModel().addListSelectionListener(colListener); 
    return table; 
} 

ListSelectionListener rowListener = event -> { 
    if(event.getValueIsAdjusting()) 
     return; 

    System.out.println("Row: "+((ListSelectionModel) event.getSource()).getMinSelectionIndex()); 
}; 

ListSelectionListener colListener = event -> { 
    if(event.getValueIsAdjusting()) 
     return; 

    System.out.println("Col: "+((ListSelectionModel) event.getSource()).getMinSelectionIndex()); 
}; 

我的目標是打開/關閉單元格。它的工作原理除了聽衆在選擇一個已經選擇的單元格時不會觸發這個事實,這個單元格是通過上面的SSCCE表示的。

除非我使用MouseListener並手動管理cooridnates,似乎沒有任何聽衆可以附加到JTable(或其型號/選擇模型)來處理此問題。使用TableModelListener,我可以偵聽更改,但此事件針對先前的單元格(已被取消選擇),並且單擊不選擇單元格的區域會導致該偵聽器觸發。

回答

2

我的目標是打開/關閉單元格。

將布爾數據存儲在TableModel中。然後,無論何時單擊單元格,該值都將在真/假之間切換。

布爾值的默認渲染器是複選框。如果您不想查看複選框,則可以隨時使用自定義渲染器。