PDA

Visualizza la versione completa : [JAVA] JList


luketto
12-07-2005, 00:33
Salve ragazzi,
possibile inserire in una JList degli oggetti così come per il JCombo?

ho visto che c'è il metodo add (Component, Object) ma non so a cosa serve!

Grazie

isis
12-07-2005, 00:40
Non so a cosa serve il metodo che hai trovato tu; io so che si può creare la JList passando al costruttore un oggetto DefaultListModel e poi usare addElement(String s) della classe DefaultListModel.

luketto
12-07-2005, 00:46
Ti spiego cosa devo fare:

Hai presente il moduletto utilizzato in Outlook per scegliere i contatti a cui inviare la mail?

Tengo due JList, "ListaContatti" e "Destinatari"

Inizialmente "Destinatari" è vuota mentre "ListaContatti" contiene l'elenco di tutti i contatti presenti in rubrica

Il doppio click su un contatto lo trasferisce nell'altra lista!

Il contatto però non è una stringa a me ma un oggetto perchè contiene id nome email

Voglio che nella jlist compare solo il nome ma quando poi vado a verificare tutti i contatti presenti nella lista "Destinatari" riesco ad identificare id ed email

Una cosa del genere l'ho fatta con JComboBox ma qui non so come gestire la cosa

Help me

valer_85
12-07-2005, 11:43
prima devi creare un array di oggetti "contatti" poi lo devi passare alla lista in questo modo:


Contatti[] c= blablabla//creo l'array con i contatti
JList contatti = new JList(c);

quando selezioni un item della lista devi gestire l'evento con un valuechanged, nn c'è bisogno di fare doppio click... :ciauz:

luketto
12-07-2005, 17:46
Ok per il riempimento delle liste, ma come posso poi gestire il passaggio da una lista ad un'altra?

Andrea1979
12-07-2005, 17:57
ti posto un po' di codice



import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class persona {

private String nome, cognome, email;

public String getName() {
return nome;
}

public String getSurname() {
return cognome;
}

public String getEmail() {
return email;
}

public String toString() {
return nome+" "+cognome+" <"+email+">";
}


persona(String nome, String cognome, String email) {
this.nome = nome;
this.cognome = cognome;
this.email = email;
}

}

public class selezionaContatti extends JFrame implements ActionListener {

public void actionPerformed(ActionEvent ae) {
if (ae.getSource().equals(done)) {
if (whole.getSelectedIndex() != -1) {
persona[] selectedp = new persona[whole.getSelectedIndices().length];
for (int i = 0; i < selectedp.length; i++) {
selectedp[i] = (persona) whole.getSelectedValues()[i];
}
selected.setListData(selectedp);
}
}
else { //qualcosa per cancel
}
}

private JList whole, selected;
private JButton done, cancel;

public selezionaContatti(persona[] pers) {
super("Selezione Contatti");
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(new JLabel("Aggiungi/Rimuovi Contatti"), BorderLayout.NORTH);

whole = new JList(pers);
whole.setLayoutOrientation(JList.VERTICAL);
whole.setSelectionMode(ListSelectionModel.MULTIPLE _INTERVAL_SELECTION);
JScrollPane jspw = new JScrollPane(whole);

selected = new JList();
JScrollPane jsps = new JScrollPane(selected);
done = new JButton("Continua");
done.addActionListener(this);
cancel = new JButton("Annulla");
cancel.addActionListener(this);
JPanel south = new JPanel();
south.add(done);
south.add(cancel);
this.getContentPane().add(south, BorderLayout.SOUTH);
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jspw, jsps);
split.setDividerLocation(300);
this.getContentPane().add(split, BorderLayout.CENTER);
this.setSize(600, 400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
}

public static void main (String args[]) {
String[] nomi = {"Andrea", "Elisabbeta", "Angela", "Giuseppe", "Marco", "Matteo", "Michela", "Giulia"};
String[] cognomi= {"Bianco", "Rossi", "Verdi", "Neri", "Marroni", "Celesti", "Grigio", "Bianchi"};
persona[] p = new persona[nomi.length];
for (int i=0; i < p.length; i++) {
p[i] = new persona(nomi[i], cognomi[i], (cognomi[i]+"."+nomi[i]+"@html.it").toLowerCase());
}
selezionaContatti sc = new selezionaContatti(p);
}
}

Allora, qui ho delegato ad un pulsante l'aggiungere elementi della lista di sinistra a quella di destra. Non va bene perché semplicemente resetta la lista di destra ogni volta che si fa una modifica mentre ci starebbe meglio una gestione più oculata (controllare quali elementi siano stati già aggiunti e non rimuovere niente se non esplicitamente richiesto). Puoi anche vedere il tutorial sulle liste (cerca swing tutorial) sul sito della sun.
Ciao

luketto
12-07-2005, 17:59
grazie

luketto
12-07-2005, 18:06
Ma io gli array non posso crearli staticamente,
il contenuto delle due liste cambiano!
Non è possibile aggiungere o eliminare un elemento dalla lista dinamicamente?
Io avevo usato i Vector invece di array[]
è sbagliato?

LeleFT
12-07-2005, 18:58
Certo che puoi utilizzare i Vector.
Se la JList non prende un Vector come argomento (non ricordo se lo prende o meno), puoi sempre eicavarti il relativo array in due modi:

1) Utilizzando il metodo toArray() di Vector (che però ha problemi di cast con le stringhe)

2) Creare un array dimensionandolo con vector.size() e popolarlo scorrendo tutti gli elementi del Vector.


Ciao. :ciauz:

luketto
12-07-2005, 19:44
ma estrarre tutti gli elementi dalla JList?

avevo pensato a questo:
n = numero di elementi presenti (ma come lo ottengo?)
for (i=0; i<n; i++)
estrai_elemento_iesimo


Come posso fare?

Loading