Domanda

Ho creato la seguente classe che implementa un'interfaccia ListSelectionListener. Questa classe dovrebbe "ascoltare" gli eventi di selezione di un JList Ho creato. Ogni volta che il clic l'uso su una fila di questa lista, il valore selected_row dovrebbero essere aggiornati e la stringa "La fila formato selezionato è ...." dovrebbe quindi cambiare. Tuttavia dopo aver cliccato le righe più di una volta, il valore select_row non cambia. Qualcuno mi può fornire un con una spiegazione per questo e, si spera, un modo per fare quello che voglio? Grazie in anticipo !!

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

        }
  }


 }   
È stato utile?

Soluzione

ho letto la documentazione, come ad indicare che il ListSelectionEvent dice solo che la selezione tra il firstIndex e lastIndex è stato cambiato, ma non in quale direzione. Una volta che sai che si è verificato un cambiamento (che un ListSelectionEvent è stato licenziato) si può solo leggere il valore corrente selezionato dalla JList:

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

Ti consigliamo di controllare selected_row è non negativo, nel caso in cui l'operazione di utente è semplicemente deselezionando l'opzione unica selezionata.

Altri suggerimenti

Per favore, puoi condividere il codice che si attacca questo listener il il JList? Dovrebbe essere qualcosa di simile:

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

Come scrivere ListSelection Listener

Non ti vuole verificare la presenza di e.getValueIsAdjusting () essere vera? Perché questo dovrebbe significare che l'evento ha cambiato. Questo è probabilmente il motivo per cui funziona una volta (la prima volta che ci può essere alcun cambiamento) e dopo che non funziona.

Anche io avrebbe cambiato per dire se (e.getValueIsAdjusting ()), in quanto restituisce un valore booleano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top