2010-09-28 165 views
2

我已經創建了下列實現ListSelectionListener接口的類。這個類應該「監聽」我創建的JList的選擇事件。每次使用單擊該列表的一行時,selected_row值應該更新,因此應該更改字符串「所選的格式行是......」。但是,在多次單擊行之後,select_row值不會更改。任何人都可以爲我提供一個解釋,希望能有辦法做到我想要的嗎?提前致謝!!valueChanged in ListSelectionListener not working

import java.util.List; 

import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; 

import ee.dobax.portal.CommonPath; 

public class FormatListSelectionListener implements ListSelectionListener{ 

public ContentGenerated content; 
private CommonPathList path_list; 
private ConfigRenderingDialog dialog; 

public FormatListSelectionListener(ConfigRenderingDialog dialog){ 

    content = dialog.content; 
    path_list = dialog.pathList; 
} 

public void valueChanged(ListSelectionEvent e) { 
    int selected_row; 

    if(e.getValueIsAdjusting() == false){ 
     selected_row = e.getLastIndex(); 


    System.out.println("The format row selected is "+selected_row); 
     path_list.addFormatListRowSelected(selected_row); 

     List<CommonPath> list_p = content.getPathList(selected_row); 

     Object[] path_list_to_array = new Object[list_p.size()]; 

     path_list.getContents().removeAllElements(); 

     for(int x = 0; x < list_p.size(); x++){ 
      path_list_to_array[x] = list_p.get(x); 
      path_list.getContents().addElement(path_list_to_array[x]); 
      } 

     } 
    } 


} 

回答

4

我看過文檔,指出ListSelectionEvent只會告訴您在firstIndexlastIndex之間的選擇已被更改,但不是在哪個方向上。一旦你知道發生了變化(即一個ListSelectionEvent已經被解僱了),你可以只讀取來自JList當前選擇的值:

selected_row = ((JList) e.getSource()).getSelectedIndex(); 

你要檢查selected_row非負,以防用戶操作只是取消選擇唯一選擇的選項。

+0

((JList的)e.getSource())getSelectedIndex()不檢索任何東西.... – Anto 2010-09-28 13:48:38

+0

@Tony:你確定的東西其實是被選中的呢? – 2010-09-28 14:33:16

+0

是的,在FormatList構造函數類中我有 this.setSelectedIndex(0); – Anto 2010-09-28 15:55:18

0

難道你不想檢查e.getValueIsAdjusting()是真的嗎?因爲這意味着事件發生了變化。這可能是爲什麼它一次工作(第一次可能沒有變化),並且在此之後不起作用。

此外,我會改變它說如果(e.getValueIsAdjusting()),因爲它返回一個布爾值。

1

你能分享一下這個監聽器的JList代碼嗎? 它應該是這樣的:

list = new JList(listData); 
listSelectionModel = list.getSelectionModel(); 
listSelectionModel.addListSelectionListener(
     new FormatListSelectionListener()); 

How to write ListSelection Listener

+0

是的,它幾乎是: ListSelectionModel listSelectionModel = this.getSelectionModel(); listSelectionModel.addListSelectionListener(new FormatListSelectionListener(dialog)); – Anto 2010-09-28 14:07:36