2012-06-02 91 views
3

我一直在研究這個問題,但還沒有找到讓我滿意的答案。 如您所知,當您在jtable中選擇一行(通過單擊)時,如果不使用!getValueIsAdjusting,則選擇更改事件觸發兩次。如果您使用鍵盤箭頭選擇一行,則不會發生這種情況。要解決該問題,請檢查getValueIsAdjusting是否返回false。getValueIsAdjusting到底做了什麼?

我的問題是,如果我通過點擊選擇一行而不是使用鍵盤箭頭時,事件觸發兩次? getValueIsAdjusting做什麼來解決它?

感謝先進! :D

+2

你有至少閱讀方法的javadoc,和setValueIsAdjusting的鏈接的javadoc( )?你在這個文檔中不瞭解什麼?我不明白它如何更清晰。 http://docs.oracle.com/javase/6/docs/api/javax/swing/event/ListSelectionEvent.html#getValueIsAdjusting%28%29 –

回答

10

由於JB Nizet鏈接到狀態的javadocgetValueIsAdjusting()檢查特定事件(更改)是否是鏈條的一部分,如果是,則返回true。當指定事件是鏈中的最後一個時,它將僅返回false

在你的情況下,通過點擊選擇一行實際上觸發了兩個事件:一個mouseDownmouseUp事件,並且兩者都發送到你的事件監聽器。如果您正確執行getValueIsAdjusting()以便在值爲true時返回,那麼您將只對鏈中的最後一個事件採取行動,即在放開鼠標左鍵時觸發的mouseUp事件。

Java教程包括捕獲事件的an example,您可以使用它來記錄選擇事件並自己進行實驗。取消event.getValueIsAdjusting()檢查的回報以記錄每個被觸發的事件。

+0

很好的解釋;更多示例[此處](http://stackoverflow.com/a/10623134/230513)和[這裏](http://stackoverflow.com/a/7519403/230513)。 – trashgod

+0

感謝您的解釋。我現在明白了。但還有一件事情,爲什麼mouseDown和mouseUp,沒有獲得焦點和失去焦點? – CodeBlue

+0

nvm我現在明白了。謝謝你讓我清楚:D – CodeBlue

0
String interessen[]= {"aaaaaaa", "bbbbbbbb", "ccccccccc", "ddddddd"}; 

    myList = new JList<>(interessen); 

    myList.addListSelectionListener(new ListSelectionListener() { 


     @Override 
     public void valueChanged(ListSelectionEvent e) { 
      if(!e.getValueIsAdjusting()) 
      System.out.println(myList.getSelectedValue()); 

     } 
    }); 

上面的代碼顯示了getValueIsAdjusting做了什麼,沒有這些方法可能會調用一個事件,例如。兩次(這取決於事件)。

沒有getValueIsAdjusting環路輸出點擊JList中的一些元素後: AAAAAAA AAAAAAA

與循環: AAAAAAA

相關問題