Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 23
  1. #11
    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

  2. #12
    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.

  3. #13
    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

  4. #14
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Sì nel frattempo avevo risolto anche quello :-)
    Ora non riesco a far funzionare bene il metodo per eliminare un menu.
    Ecco:

    codice:
    public static int deleteMenu(Menu selectedMenu) {
    
            int result = 0;
    
            PreparedStatement statement = null;
    
            //verifico che il campo non sia vuoto
            try {
                if (selectedMenu == null) {
                    JOptionPane.showMessageDialog(warning);
                    return result;
                }
                //elimino il menu dal database
                statement = connection.prepareStatement("DELETE FROM Menu WHERE menuName=?");
                statement.setString(1, selectedMenu);
                result = statement.executeUpdate();
                
            } //catturo le eccezioni e chiudo lo statement per liberare risorse
            return result;
        }
    Ottengo errore in statement.setString(1, selectedMenu); sempre il solito di incompatible type.
    Ora io credo che allo statement devo passargli per forza una stringa, ma come faccio se il metodo prende un oggetto menu in input (come penso sia giusto che deve essere)?
    Infatti l'oggetto menu gli viene passato dal metodo che gestisce l'azioen del pulsante Elimina:

    codice:
        private void bDeleteMenuActionPerformed(java.awt.event.ActionEvent evt) {                                            
            
            Menu selectedMenu = (Menu)menuList.getSelectedValue();
            selectedMenu.getMenuName();
            int index = menuList.getSelectedIndex();
            DBConnection.deleteMenu(selectedMenu);
            int size = model.getSize();
            if (size == 0) { //Non sono rimasti menu nella lista, disabilito Elimina Menu
                bDeleteMenu.setEnabled(false);
            } else { 
                if (index == model.getSize()) {
                    //rimuovo l'elemento nell'ultima posizione
                    index--;
                }
                menuList.setSelectedIndex(index);
                menuList.ensureIndexIsVisible(index);
            }
            model.removeElement(selectedMenu);
            menuName.setText("");
        }
    Se ci sono altre strade per fare questa cosa, sono aperta a suggerimenti!
    Io l'avevo pensata così: l'utente deve poter eliminare il menu che ha selezionato dalla jlist. Per cui se un menu è effettivamente selezionato il pulsante Elimina si abilita e schiacciandolo deve essere passato al metodo che cancella dal database il menu il nome del menu da eliminare (essendo sicuramente univoco). Ora come avevo fatto prima funzionava, ma ovviaemnte dopo le modifiche non va più, e sto cercando di adattarlo alla nuova versione.

  5. #15
    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
    Ottengo errore in statement.setString(1, selectedMenu); sempre il solito di incompatible type.
    Ora io credo che allo statement devo passargli per forza una stringa, ma come faccio se il metodo prende un oggetto menu in input (come penso sia giusto che deve essere)?
    Scusa ma mi pare evidente .... stai passando alla query un oggetto Menu .... che gli serve? Secondo te come "saprebbe" e potrebbe usarlo?

    Semplicemente: selectedMenu.getMenuName() (o getName() ... non so come l'hai chiamato), visto che alla query serve il menuName ... e non il "menu" oggetto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #16
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Scusa ma mi pare evidente .... stai passando alla query un oggetto Menu .... che gli serve? Secondo te come "saprebbe" e potrebbe usarlo?

    Semplicemente: selectedMenu.getMenuName() (o getName() ... non so come l'hai chiamato), visto che alla query serve il menuName ... e non il "menu" oggetto.

    infatti nel frattempo ho risolto (credo) ma mi è sorto un altro problema:

    Ho modificato la riga incriminata così:

    statement.setObject(1, selectedMenu.getMenuName());

    e ora funziona però mi crea problemi al metodo menuListValueChanged perché se elimino un menu la riga:
    menuName.setText(selectedMenu.toString());
    mi da NullPointerException a rutime.
    menuName non è altro che il campo di testo dove viene visualizzato il nome del menu selezionato nella finestra.

  7. #17
    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
    e ora funziona però mi crea problemi al metodo menuListValueChanged perché se elimino un menu la riga:
    menuName.setText(selectedMenu.toString());
    mi da NullPointerException a rutime.
    Scusa ma anche qui ... hai un NPE ... qualcosa è null, ovvio, hai verificato cosa? selectedMenu è l'oggetto preso da getSelectedValue()? Può essere null, lo testi prima?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #18
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Scusa ma anche qui ... hai un NPE ... qualcosa è null, ovvio, hai verificato cosa? selectedMenu è l'oggetto preso da getSelectedValue()? Può essere null, lo testi prima?
    selectedMenu è l'oggetto preso da getSelectedValue.
    il problema sorge quando elimino un menu

    codice:
            Menu selectedMenu = (Menu)menuList.getSelectedValue();
            menuName.setText(selectedMenu.getMenuName());
    nella seconda riga...


    Il metodo che richiama l'eliminazione del menu è questo:

    codice:
        private void bDeleteMenuActionPerformed(java.awt.event.ActionEvent evt) {                                            
            
            Menu selectedMenu = (Menu)menuList.getSelectedValue();
            selectedMenu.getMenuName();
            int index = menuList.getSelectedIndex();
            DBConnection.deleteMenu(selectedMenu);
            int size = model.getSize();
            if (size == 0) { //Non sono rimasti menu nella lista, disabilito Elimina Menu
                bDeleteMenu.setEnabled(false);
            } else { 
                if (index == model.getSize()) {
                    //rimuovo l'elemento nell'ultima posizione
                    index--;
                }
                menuList.setSelectedIndex(index);
                menuList.ensureIndexIsVisible(index);
            }
            model.removeElement(selectedMenu);
            menuName.setText("");
    
        }
    Non riesco a capire...
    Il punto è che selectedMenu è evidentemente null a quel punto, ma non dovrebbe esserlo, perché la selezione si è (o dovrebbe essersi) spostata automaticamente sulla successiva/precedente riga disponibile della jlist...

  9. #19
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ho risolto l'errore NPE! Semplicemente modificando così il metodo:

    codice:
        private void menuListValueChanged(javax.swing.event.ListSelectionEvent evt) {                                      
            int index = menuList.getSelectedIndex();
            int size = model.getSize();
            if (index >= 0) { 
                bDeleteMenu.setEnabled(true);
                Menu selectedMenu = (Menu)menuList.getSelectedValue();
                menuName.setText(selectedMenu.getMenuName());
            } else { 
                bDeleteMenu.setEnabled(false);
                }
        }

  10. #20
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    E' possibile che io sia fusa oggi, ma ora mi trovo davanti un ostacolo su cui sto sbattendo la testa da almeno un'ora.
    Io devo fare in modo che sia possibile inserire i prodotti dei menu in base alla selezione effettuata sulla jlist (che mi deve ritornare l'id del menu effettivamente selezionato) OPPURE se inserisco un nuovo menu. Sto provando a realizzare il primo caso, ma mi inserisce i prodotti nel menu sbagliato, ovvero solo nell'ultimo che compare nella jlist. Questo è il codice del metodo di inserimento:

    codice:
        private void bAddProdActionPerformed(java.awt.event.ActionEvent evt) {                                         
            Product newProduct=new Product();
            Menu selectedMenu = (Menu)menuList.getSelectedValue();
            newProduct.setMenuId(selectedMenu.getMenuId());
            newProduct.setProductName(productName.getText());
            newProduct.setProductPrice(Float.parseFloat(productPrice.getText()));
            int result = DBConnection.insertProduct(newProduct);
            //se l'inserimento è andato a buon fine abilito i campi per le altre operazioni
            if (result == 1) {
    //campi da abilitare/disabilitare
    
            }
        }
    In pratica qua:
    Menu selectedMenu = (Menu)menuList.getSelectedValue();

    invece di restituire il menu selezionato restituisce l'ultimo visibile nella jlist!
    E se per caso l'ultimo menu inserito è anche l'ultimo nell'elenco (alfabetico) mi da anche Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException.
    Ultima modifica di Jamie04; 09-04-2014 a 20:40

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.