3

我创建了以下实现 ListSelectionListener 接口的类。这个类应该“监听”我创建的 JList 的选择事件。每次用户单击此列表的一行时,都应更新 selected_row 值,因此字符串“所选格式行是 ....”应更改。但是,在多次单击行后,select_row 值不会改变。任何人都可以为此提供一个解释,并希望能提供一种方法来做我想做的事吗?提前致谢!!

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

3 回答 3

5

我读到的文档表明,唯一告诉你和ListSelectionEvent之间的选择被改变了,但不是在哪个方向上。一旦您知道发生了更改(已触发 a),您就可以从 中读取当前选定的值:firstIndexlastIndexListSelectionEventJList

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

您需要检查selected_row是否为非负数,以防用户操作只是取消选择唯一选定的选项。

于 2010-09-28T12:49:41.787 回答
1

您能否分享将此侦听器附加到 JList 的代码?它应该是这样的:

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

请参阅如何编写 ListSelection 侦听器

于 2010-09-28T12:53:11.543 回答
0

您不想检查 e.getValueIsAdjusting() 是否为真吗?因为那应该意味着事件发生了变化。这可能就是为什么它工作一次(第一次可能没有变化)然后就不起作用了。

另外我会将其更改为 if(e.getValueIsAdjusting()) 因为它返回一个布尔值。

于 2010-09-28T12:47:59.060 回答