Visualizzazione dei risultati da 1 a 10 su 23

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    All'inizio il "findAllMenus" potrebbe creare un ArrayList ma se in futuro volessi passare a LinkedList puoi farlo, senza che il resto all'esterno debba cambiare. Se volessi un giorno restituire un List "immutabile" puoi farlo, grazie a Collections.unmodifiableList.
    Insomma, hai più possibilità di cambiare .... mentre se usi Vector hai abbastanza le mani legate o comunque diventa più complicato poter cambiare "idea".
    Sì avevo letto che Vector è obsoleta, però guarda, in questo corso non ci hanno mai parlato delle liste, per cui non è nemmeno supposto che io le debba usare. Vector per i miei scopi va bene.

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Invece es.:
    codice:
    Menu menu = new Menu();
    menu.setName(rs.getString("menuName"));
    menu.setXXXX(rs.getYYYY("xxxxxx"));
    .....
    lista.add(menu);
    Ok, supponendo che continuo a usare il vettore (quindi sarà vettore.add(menu)), come posso risolvere il fatto che l'id del menu non deve venir mostrato nella jlist? Se evito di aggiungerlo al vettore poi però non posso recuperarlo in seguito senza fare tutta la manfrina che ho postato all'inizio, o mi sbaglio?
    Grazie infinite.


    Edit: ora però ho un altro problema. Nella jlist adesso mi mostra sempre lo stesso menu, l'ultimo inserito, ripetutamente (per un numero di volte pari alla dimensione del vector). Questo era il codice che riempie la jlist:
    codice:
    menuList = new javax.swing.JList(model);
    for (int i=0; i<menuVoices.size(); i++) {
    model.addElement(menuVoices.get(i));
    }
    dove menuVoices è il vettore dei menu creato col metodo fillJlistMenu di cui sopra.

    ri-edit: ho risolto, perché l'istruzione Menu menu=new Menu(); doveva stare all'interno del ciclo while, io l'avevo messa fuori e così praticamente lavorava sempre sullo stesso oggetto. E, tra l'altro, ho notato che il menuId non viene comunque mostrato nella jlist.
    Il costruttore di menu non l'ho creato. Dovrei farlo secondo voi? Non saprei come inizializzare l'oggetto menu.
    Ultima modifica di Jamie04; 09-04-2014 a 12:42

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    per cui non è nemmeno supposto che io le debba usare.
    Vabbè ... ok.

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Ok, supponendo che continuo a usare il vettore (quindi sarà vettore.add(menu)), come posso risolvere il fatto che l'id del menu non deve venir mostrato nella jlist?
    Il renderer predefinito di JList invoca toString() su ogni elemento del list model. Quindi in Menu basta definire un toString() che restituisce il "menuName". Stop, tutto qui.

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Se evito di aggiungerlo al vettore poi però non posso recuperarlo in seguito senza fare tutta la manfrina che ho postato all'inizio, o mi sbaglio?
    Non ho capito ... quale è il dubbio? Avrai oggetti di tipo Menu ... il list model conterrà oggetti Menu e puoi prenderli dal list model in qualunque momento (es. l'elemento "selezionato"). Se non usi DefaultListModel parametrizzato con i generics da Java 7, esso fornisce Object ma tu "sai" che sono oggetti Menu. Quindi basta un cast e poi es. getId().

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Nella jlist adesso mi mostra sempre lo stesso menu (l'ultimo inserito credo).
    Il new Menu(); è da fare chiaramente per ogni record. Non devi istanziarlo es. una volta sola prima del classico ciclo while (rs.next()) !

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    codice:
    menuList = new javax.swing.JList(model);
    for (int i=0; i<menuVoices.size(); i++) {
    model.addElement(menuVoices.get(i));
    }
    Questo è ok ma ovviamente è da un'altra parte (dove crei la GUI, immagino).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non ho capito ... quale è il dubbio? Avrai oggetti di tipo Menu ... il list model conterrà oggetti Menu e puoi prenderli dal list model in qualunque momento (es. l'elemento "selezionato"). Se non usi DefaultListModel parametrizzato con i generics da Java 7, esso fornisce Object ma tu "sai" che sono oggetti Menu. Quindi basta un cast e poi es. getId().

    Scusami, ho editato così tante volte il messaggio che ti ho fatto perdere tempo a rispondere a cose già risolte (cioè il problema dei dati duplicati nella jlist e dell'assenza del menuId)!
    Adesso devo gestire le selezioni sulla lista, così p come era prima più o meno:

    codice:
        private void menuListValueChanged(javax.swing.event.ListSelectionEvent evt) {                                      
            //model.addListDataListener(null);
            int index = menuList.getSelectedIndex();
            int size = model.getSize();
            if (index >= 0) { 
                bDeleteMenu.setEnabled(true);
            } else { 
                bDeleteMenu.setEnabled(false);
                }
            String field = (String)menuList.getSelectedValue();
            menuName.setText(field);
            //int menuId=DBConnection.getMenuId(field);
            //System.out.println(menuId);
        }
    Ma ovviamente ora mi da errore a runtime di casting sulla riga String field = menuList.getSelectedValue();
    Il mio listModel contiene il vettore di oggetti menu.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    codice:
    String field = (String)menuList.getSelectedValue();
    Menu selectedMenu = (Menu) menuList.getSelectedValue();
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.