2010-09-28 29 views
2

J'ai créé la classe suivante implémentant une interface ListSelectionListener. Cette classe devrait "écouter" les événements de sélection d'un JList que j'ai créé. Chaque fois que l'utilisateur clique sur une ligne de cette liste, la valeur selected_row doit être mise à jour et la chaîne "La ligne de format sélectionnée est ...." doit donc être modifiée. Cependant, après avoir cliqué plusieurs fois sur les lignes, la valeur select_row ne change pas. Quelqu'un peut-il me donner une explication pour cela et, espérons-le, une façon de faire ce que je veux? Merci d'avance!!valueChanged dans ListSelectionListener ne fonctionne pas

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]); 
      } 

     } 
    } 


} 

Répondre

4

J'ai lu les documents comme indiquant que le ListSelectionEvent vous indique seulement que la sélection entre firstIndex et lastIndex a été modifiée, mais pas dans quelle direction. Une fois que vous savez qu'un changement est survenu (qu'un ListSelectionEvent a été tiré), vous pouvez simplement lire la valeur actuelle choisie dans le JList:

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

Vous voulez vérifier selected_row est non-négatif, au cas où le Le fonctionnement de l'utilisateur consiste simplement à désélectionner la seule option sélectionnée.

+0

((JList) e.getSource()) getSelectedIndex() ne récupère rien .... – Anto

+0

@Tony. Etes-vous sûr quelque chose est en fait sélectionné, alors? –

+0

oui, dans la classe constructeur FormatList j'ai this.setSelectedIndex (0); – Anto

0

Voulez-vous vérifier que e.getValueIsAdjusting() est vrai? Parce que cela devrait signifier que l'événement a changé. C'est probablement pourquoi cela fonctionne une fois (la première fois il peut y avoir aucun changement) et après cela ne fonctionne pas.

Aussi je le changerais pour dire si (e.getValueIsAdjusting()) comme il renvoie une valeur booléenne.

1

Pouvez-vous s'il vous plaît partager le code qui attache cet auditeur le JList? Il devrait être quelque chose comme:

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

Voir How to write ListSelection Listener

+0

oui c'est à peu près ça: ListSelectionModel listSelectionModel = this.getSelectionModel(); listSelectionModel.addListSelectionListener (nouveau FormatListSelectionListener (dialog)); – Anto