Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150

    [Swing]JList, possibile?

    Vorrei realizzare un frame opzioni realizzato nel seguente modo:



    Sulla sinistra le varie voci del frame opzioni, e sulla destra, a seconda della voce selezionata, i pannelli collegati ad esempio a Generale od a Chat.
    E' possibile realizzare una cosa simile con JList?
    Perche' l'immagine sopra raffigura una JList da me creata, ma non capisco come poter creare diversi pannelli "collegati" alle varie voci della JList e farli comparire sulla destra (ho usato un Jsplitpane)

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [Swing]JList, possibile?

    Originariamente inviato da Skaffa
    Perche' l'immagine sopra raffigura una JList da me creata, ma non capisco come poter creare diversi pannelli "collegati" alle varie voci della JList e farli comparire sulla destra (ho usato un Jsplitpane)
    :master: Potresti memorizzare i pannelli in una mappa le cui chiavi sono i valori presenti nella JList. Poi ti basta aggiungere un ListSelectionListener alla lista e fare in modo che quando un elemento viene selezionato vai anche leggere il corrispettivo valore della chiave (ovvero il pannello) e lo aggiungi alla parte destra del tuo split pane :master:

    Ho scritto in modo contorto?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    a mio parere direi di si che hai scritto in modo contorto io sono all' inizio della programmazione in JAVA e vorrei capirci qualche cosa : VVoVe: VVoVe:

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da varehol
    a mio parere direi di si che hai scritto in modo contorto io sono all' inizio della programmazione in JAVA e vorrei capirci qualche cosa : VVoVe: VVoVe:
    Ok, provo a spiegarmi

    Quello che avevo in mente era di creare una serie di associazioni (chiave, valore) in cui la chiave è una stringa ed il valore un pannello.
    Nel tuo caso avresti due chiavi, "Chat" e "Generale" a cui sono legati i pannelli.

    (butto giù un po' di codice ma non ho tempo di testarlo):
    codice:
    JPanel generalPanel = new JPanel();
    ...
    JPanel chatPanel = new JPanel();
    ...
    
    TreeMap<String, JPanel> map = new TreeMap<String, JPanel>();
    map.put("Generale", generalPanel);
    map.put("Chat", chatPanel);
    
    ...
    Da qualche parte avrai il tuo oggetto JList:
    codice:
    Vector<String> data = new Vector<String>();
    data.add("Generale");
    data.add("Chat");
    JList list = new JList(data);
    ...
    ...
    list.addListSelectionListener(new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) {
        String selectedString = "" + list.getSelectedValue();
        updatePanel(selectedString);
      }
    });
    Ed infine il metodo che aggiorna il pannello a seconda della selezione:
    codice:
    JSplitPane split ...
    
    public void updatePanel(String key) {
        split.setRightComponent(map.get(key));
    }
    Il codice l'ho scritto di getto, non ho verificato eventuali errori o se i metodi sono esatti. In linea generale mi sembra corretto :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    grazie della spiegazione credo che mi potrebbe tornare utile Alex il tuo possibile pseudo codice o codice comunque

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da varehol
    grazie della spiegazione credo che mi potrebbe tornare utile Alex il tuo possibile pseudo codice o codice comunque
    In realtà non servirebbe alcuna mappa. Un modo "pulito" e valido è il seguente. Nella parte sinistra del split pane ovviamente hai un JList, nella parte destra metti un pannello (JPanel) che ha un layout CardLayout (mostra solo 1 di N componenti).
    In questo pannello metti tutti i tuoi vari JPanel. Nota che quando fai l'add() devi specificare un "constraint" ... nel caso del CardLayout basta una banale stringa (che nel tuo caso è proprio ciò che fa comodo!).

    codice:
    // Inizializzazione
    pannelloConCardLayout.add(generalePanel, "Generale");
    pannelloConCardLayout.add(chatPanel, "Chat");
    Le stringhe nel JList le metterai poi uguali. Devi poi ovviamente gestire un ListSelectionListener, nel valueChanged() semplicemente prendi la stringa selezionata e fai:

    codice:
    cardLayout.show(pannelloConCardLayout, stringaSelezionata);
    Dove cardLayout è il CardLayout che hai impostato nel pannello di destra e di cui ti conviene tenerti anche il riferimento tra le variabili di istanza.

    Tutto qui .. semplice, pulito, niente mappe.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Si in effetti preferirei procedere come proposto da Andbin, grazie comunque delle risposte.
    Mi metto al lavoro e vi faccio sapere.

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da andbin
    *
    Mi piace incasinarmi la vita, non avevo pensato al CardLayout
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Originariamente inviato da Alex'87
    Mi piace incasinarmi la vita, non avevo pensato al CardLayout
    beh le soluzioni banali non piacciono mai a nessun programmatore o sbaglio ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.