Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 23

Hybrid View

  1. #1
    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.

  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
    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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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

  4. #4
    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);
                }
        }

  5. #5
    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ho capito dove sta il problema, almeno in parte, è in questo blocco di codice qua che fa parte del metodo che riempie la jlist:

    codice:
                while (rs.next()) {
                    Menu menu=new Menu();
                    menu.setMenuId(rs.getInt("menuId")); ***
                    menu.setMenuName(rs.getString("menuName"));
                    temp.add(menu);
                }
    In particolare nella riga asteriscata.
    Credo che questa cosa sia dovuta al fatto che nella jList il campo menuId non è visibile e pertanto non riesco a estrarlo, non in quel modo almeno.
    Ma non riesco a capire come risolvere...

    Edit. E invese sì!!! Il problema stava nel fatto che il campo menuId era statico!!
    Grazie.
    Ultima modifica di Jamie04; 09-04-2014 a 21:45

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ok adesso ho problemi nel secondo caso, cioè quando devo fare in modo che sia possibile inserire i prodotti dei menu quando inserisco un nuovo menu. Il problema è sempre il solito, appena salvo il menu la jlist viene aggiornata correttamente ma non ho il riferimento al menuId necessario per inserire il prodotto, devo chiudere e riaprire la finestra per poterlo ottenere Come posso ovviare a questa cosa?

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Avrei trovato una specie di soluzione, anche se è un po' macchinosa. Ditemi un po' che ne pensate.
    - ho creato un metodo che mi restituisce l'id dell'ultimo menu inserito cioè quello più alto (dato che l'id del menu è un intero progressivo assegnato da mysql non ci dovrebbero essere problemi spero!), tramite l'istruzione di mysql SELECT MAX(id) FROM TABLE.
    - ho creato una variabile booleana newMenuIsSaved per capire se l'utente ha salvato un nuovo menu
    - nel metodo chiamato dal pulsante che salva nel db il nuovo prodotto inserito ho messo un if: se newMenuIsSaved è true allora vuol dire che non ho un riferimento al menuID e lo devo estrarre dal db col metodo al passo 1, passandolo all'oggetto newProduct per inserire il nuovo prodotto nel db
    - se newMenuIsSaved è false vuol dire che invece è stato selezionato un menu e allora mi prendo il suo id come facevo prima tramite il getSelectedValue() della jlist.
    Devo però stare attenta a come switchare questa variabile. Dovrebbe essere statica secondo voi?
    In generale che ne pensate di questa soluzione? Funziona, ho solo paura di incappare in qualche circostanza non prevista.

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