Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    ListBox con indice elementi

    Buona domenica a tutti.
    Volevo sapere una cosa:
    Voglio una ListBox che ad ogni elemento ne associ la posizione nella lista, quindi, per esempio, al primo elemento sarà associato il numero uno, al secondo il numero due ecc..
    Ovviamente intendo che l'associazione sia grafica, cioè automaticamente ad ogni elemento vi sarà associato un numero sulla sinistra indicante la sua posizione nella ListBox.
    Esiste un componente di Java o una libreria qualsiasi che mi permetta di ottenere questo?
    Forza Napoli!

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Utilizzando la componente Swing JList puoi fare l'override di getElementAt nel model per mostrare cosa vuoi
    codice:
    DefaultListModel model = new DefaultListModel<Object>(){
           @Override
           public Object getElementAt(int index) {
              return (index + 1) + " - " + super.getElementAt(index);
          }
    };
    Mentre per ricavare un elemento nel codice userai .get(index)
    Ultima modifica di RoTeam; 23-11-2014 a 15:50

  3. #3
    Ho fatto così
    codice:
    String prova[]={"Elemento1","Elemento2","Elemento3"};
    JList l = new JList<Object>(prova);
    l.setModel(new DefaultListModel<Object>() {
         ...
        @Override
        public Object getElementAt(int index) {
             return (index+1)+" - "+super.getElementAt(index);
         }
    });
    l.setVisible(true);
    Solo che ora la lista non si vede proprio, cosa ho sbagliato?
    Forza Napoli!

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Quote Originariamente inviata da CaMpIoN Visualizza il messaggio
    Ho fatto così
    codice:
    String prova[]={"Elemento1","Elemento2","Elemento3"};
    JList l = new JList<Object>(prova);
    l.setModel(new DefaultListModel<Object>() {
         ...
        @Override
        public Object getElementAt(int index) {
             return (index+1)+" - "+super.getElementAt(index);
         }
    });
    l.setVisible(true);
    Solo che ora la lista non si vede proprio, cosa ho sbagliato?
    Posta come l'hai aggiunta al JFrame, ricordati anche di settare la grandezza...

  5. #5
    Ti posto il codice completo nel main di una classe che ho creato apposta per provare la funzione:
    codice:
    f = new JFrame("Prova");
    String prova[]={"Elemento1","Elemento2","Elemento3"};
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(200, 200);
    f.setVisible(true);
    f.setResizable(false);
    f.setLocationRelativeTo(null);
    
    
    l = new JList<Object>(prova);
    l.setSize(f.getSize());
    l.setVisible(true);
    l.setModel(new DefaultListModel<Object>() {
        /**
        * 
       */
       private static final long serialVersionUID = 1L;
    
       @Override
       public Object getElementAt(int index) {
            return (index+1)+" - "+super.getElementAt(index);
        }
    });
    f.add(l);
    Prima del main inizializzo f e l, l in questo modo:
    codice:
    public static JList<Object> l;
    Forza Napoli!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da CaMpIoN Visualizza il messaggio
    codice:
    String prova[]={"Elemento1","Elemento2","Elemento3"};
    JList l = new JList<Object>(prova);
    Questo crea già un list model interno "fisso" con i dati dall'array.

    Quote Originariamente inviata da CaMpIoN Visualizza il messaggio
    codice:
    l.setModel(new DefaultListModel<Object>() {
         ...
    Questo sostituisce completamente il list model precedente con un nuovo DefaultListModel sostanzialmente vuoto.

    Sfortunatamente DefaultListModel ha solo un costruttore senza argomenti. Quindi dovresti tenere il riferimento a questo nuovo DefaultListModel e fare tanti addElement quanti sono necessari per gli elementi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Se guardi nelle source il costrutto di JList(final E[]) va a creare un nuovo model quindi per averci gli elementi del modello precedente dovresti fare così
    codice:
    l.setModel(new DefaultListModel<Object>() {
                {
                    for(int i = 0; i < l.getModel().getSize(); i++)
                        addElement(l.getModel().getElementAt(i));
                }
    
    
                @Override
                public Object getElementAt(int index) {
                    return (index + 1) + " - " + super.getElementAt(index);
                }
    });

  8. #8
    Ah ecco, non sapevo che il contenitore degli elementi di una listbox era il list model.
    Ho risolto allora, vi ringrazio per l'aiuto Buona domenica

    @RoTeam: Bene, io lo facevo esternamente, almeno in questo modo posso passare contenitori da parametro senza preoccuparmi di aggiungerli dopo, grazie ancora
    Ultima modifica di CaMpIoN; 23-11-2014 a 17:31
    Forza Napoli!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.