2012-04-17 27 views
2

我向一個JTable添加了一個ListSelectionListener,這樣當我選擇一行時,我得到了我用來填充該行的值。但是當我選擇行時,我注意到兩個事件被觸發:一個用於列選擇,我假設,另一個用於行選擇。有什麼方法可以防止兩個事件被解僱?我將表格選擇模式設置爲SINGLE_SELECTION。這裏是我的代碼:如何防止兩個事件被解僱?

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 

    @Override 
    public void valueChanged(ListSelectionEvent event) { 
    int row = table.convertRowIndexToModel(table.getSelectedRow()); 
    SomeObject someObject = (SomeObject) tableModel.getValueAt(row, 0); 
    System.err.println(someObject); 
    } 

}); 

回答

4

在做任何事之前,您可能需要檢查event.getValueIsAdjusting()的值。

如果返回true,則可以忽略的事件,因爲它是「一個在一系列的多個事件,其中的變化仍然被製成的」(引自的Javadoc)

getValueIsAdjusting()

setValueIsAdjusting()

0

難道你得到從DE /選擇兩個事件:第一次出現的將是老項目的取消選擇,以及隨後的事件將成爲新的選擇一。

如果您在此事件之外存儲先前選擇的對象(getSource()?),然後檢查當前事件是否與最後一個事件具有相同的對象。如果是這樣,你可以假設你正在分析的事件剛剛被取消,之前已被選中。如果它們不相等,則更新您的外部變量並實際運行您想要運行的任何代碼。