valueChanged в ListSelectionListener не работает - PullRequest
2 голосов
/ 28 сентября 2010

Я создал следующий класс, реализующий интерфейс 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]);
            }

        }
  }


 }   

Ответы [ 3 ]

4 голосов
/ 28 сентября 2010

Я прочитал документы, как указывающие на то, что ListSelectionEvent только говорит вам, что выбор между firstIndex и lastIndex был изменен, но не в каком направлении.Как только вы узнаете, что произошло изменение (что ListSelectionEvent был запущен), вы можете просто прочитать текущее выбранное значение из JList:

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

. Вы захотите проверить selected_rowявляется неотрицательным, если пользовательская операция просто отменяет выбор единственной выбранной опции.

1 голос
/ 28 сентября 2010

Не могли бы вы поделиться кодом, который присоединяет этот слушатель к JList?Это должно быть что-то вроде:

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

См. Как написать ListSelection Listener

0 голосов
/ 28 сентября 2010

Не хотите ли проверить, что e.getValueIsAdjusting () имеет значение true?Потому что это должно означать, что событие изменилось.Вероятно, поэтому он работает один раз (первый раз, когда изменений может не быть), а после этого не работает.

Также я бы изменил его, чтобы сказать, если (e.getValueIsAdjusting ()), как это возвращаетлогическое значение.

...