2010-10-03 1 views
1

J'ai créé un JDialog avec trois listes JList. La sélection d'une ligne dans la première liste (nommée FirstList) met à jour le contenu de la deuxième liste (SecondList) et la sélection d'une ligne dans la deuxième liste met à jour le contenu de la troisième liste (ThirdList). Dans la classe ThirdList j'ai inclus la méthode suivante:Problème dans la méthode valueChanged de l'interface ListSelectionListener

public void addRowsSelected(int format_row, int pathway_row){ 
    first_list_selected_row = fl_row; 
    second_list_selected_row = sl_row; 

    ListSelectionModel listSelectionModel = this.getSelectionModel(); 
    listSelectionModel.addListSelectionListener(new ThirdListSelectionListener(dialog, first_list_selected_row, second_list_selected_row)); 
} 

J'ai créé la classe ThirdListSelectionListener qui est la suivante:

package eu.keep.gui.mainwindow.menubar.renderfile; 

import java.io.IOException; 
import java.util.List; 
import java.util.ListIterator; 

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

import eu.keep.characteriser.registry.Pathway; 

public class ThirdListSelectionListener implements ListSelectionListener{ 

private ContentGenerated content; 
public EmulatorList emulator_list; 
private int first_list_selected_row; 
private int second_list_selected_row; 
private FirstList first_list; 
private SecondList second_list; 
private ThirdList third_list; 

public ThirdListSelectionListener(MyDialog dialog, int first_list_selected_row, int second_list_selected_row){ 

    this.content = dialog.content; 
    this.first_list_selected_row = first_list_selected_row; 
    this.second_list_selected_row = second_list_selected_row; 

    this.first_list = dialog.firstList; 
    this.second_list = dialog.secondList; 
    this.third_list = dialog.thirdList; 

    System.out.println("1. The first list row selected is "+this.first_list_selected_row); 
    System.out.println("2. The second list row selected is "+this.second_list_selected_row); 

} 

public void valueChanged(ListSelectionEvent e){ 

    if (e.getValueIsAdjusting()) 
      return; 

    Object source = e.getSource(); 
    ListSelectionModel list = (ListSelectionModel)e.getSource(); 

    if (list.isSelectionEmpty()) { 

    }else{ 

       //int selected_row = list.getMinSelectionIndex(); 

       try { 

      System.out.println("first: "+first_list_selected_row); 
     System.out.println("second: "+second_list_selected_row); 
     //System.out.println("third: "+selected_row); 

        // DO SOMETHING HERE 

       } catch (IOException e1) { 

       } 

      } 

    } 

} 

Maintenant le problème: si je sélectionnez d'abord, par exemple la deuxième ligne de la première liste, la deuxième ligne de la deuxième liste et la deuxième ligne de la troisième liste, j'obtiendrait, comme prévu, les messages suivants:

1. The first list row selected is 2 
2. The second list row selected is 2 
first: 2 
second: 2 
third: 2 

Cependant, si peu de temps après que je sélectionne la première ligne de la deuxième liste, puis je sélectionne à nouveau la deuxième ligne de la troisième liste, je reçois la sortie suivante:

1. The first list row selected is 2 
2. The second list row selected is 1 
first: 2 
second: 2 
third: 2 

Au lieu d'avoir « deuxième: 1 », je garde ayant "deuxième: 2". Je crois que le second_list_selected_row est mis à jour dans le constructeur ThirdListSelectionListener mais il ne change pas dans la méthode valueChanged. Quelqu'un peut-il me dire la cause de ce problème et comment y remédier? Merci d'avance!!

Répondre

1

Vous avez affecté ThirdListSelectionListenerfirst_list_selected_row et second_list_selected_row dans son ctor et ne les avez jamais modifiés (au moins dans votre code affiché). Vous pouvez obtenir la ligne actuellement sélectionnée avec first_list.getSelectedIndex() et second_list.getSelectedIndex().

Questions connexes