Chiarimenti per esercitazione :)

di il
9 risposte

Chiarimenti per esercitazione :)

Salve,mi è stata assegnata un'esercitazione che richiede,attraverso NetBeans e JFrame,di simulare lo strumento utilizzato dal cameriere per le ordinazioni Nella schermata principale avremo questo:

mentre quando si preme il bottone avremo questo:

Nella seconda finestra avremo unicamente una TEXTAREA che dovrà contenere tutti i dati acquisiti nella schermata 1,cioè numero tavolo,numero persone ecc.. Il problema è che facendo una prova ho cercato di prendermi come stringa il numero del tavolo per poi metterlo attrovarso il settext nella textarea della seconda finestra ma i metodo jcombobox netbeans me li da tutti in private void. Come posso fare? In poche parole non riesco a richiamare nt nel settext della textarea della seconda finestra
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
     String nt = (String)jComboBox1.getSelectedItem();

9 Risposte

  • Re: Chiarimenti per esercitazione :)

    Ishima ha scritto:


    Il problema è che facendo una prova ho cercato di prendermi come stringa il numero del tavolo per poi metterlo attrovarso il settext nella textarea della seconda finestra ma i metodo jcombobox netbeans me li da tutti in private void.
    Ciao e buon Natale! Almeno rispondo un po' anche oggi!

    Prima di vedere la problematica che hai posto (che mi pare più una questione di "design" delle classi), ci sarebbe un'altra cosa che dovresti precisare: come sono associati i prezzi alle portate? Spiego meglio, prendiamo i primi piatti: il costo è sempre uguale indipendentemente da primo piatto scelto .... o cambia a seconda di cosa si sceglie?
  • Re: Chiarimenti per esercitazione :)

    andbin ha scritto:


    Ishima ha scritto:


    Il problema è che facendo una prova ho cercato di prendermi come stringa il numero del tavolo per poi metterlo attrovarso il settext nella textarea della seconda finestra ma i metodo jcombobox netbeans me li da tutti in private void.
    Ciao e buon Natale! Almeno rispondo un po' anche oggi!

    Prima di vedere la problematica che hai posto (che mi pare più una questione di "design" delle classi), ci sarebbe un'altra cosa che dovresti precisare: come sono associati i prezzi alle portate? Spiego meglio, prendiamo i primi piatti: il costo è sempre uguale indipendentemente da primo piatto scelto .... o cambia a seconda di cosa si sceglie?
    Grazie mille per aver risposto,allora il prezzo varia e questo è un problema che intendo risolvere con dei vettori. Come faccio ad assegnare ad ogni riga (pietanza) un prezzo? Per adesso il problema principale è dare la prima schermata in output nella TextArea della seconda finestra
  • Re: Chiarimenti per esercitazione :)

    Ishima ha scritto:


    allora il prezzo varia e questo è un problema che intendo risolvere con dei vettori. Come faccio ad assegnare ad ogni riga (pietanza) un prezzo? Per adesso il problema principale è dare la prima schermata in output nella TextArea della seconda finestra
    Se ciascun cibo ha il suo prezzo allora devi modellare diversamente le cose. E il problema principale è appunto questo.
    Per "modellare" intendo dire che devi creare le classi necessarie a rappresentare logicamente le informazioni da gestire.

    Quindi, in prima battuta, una classe es. Cibo (o Portata) che contiene 2 informazioni: il nome (String) e il prezzo (double o int ... a seconda se vuoi con/senza decimali).
    Poi una classe es. Ordinazione che contiene i 6 cibi scelti e i due valori numerici per il numero tavolo e il numero persone.

    Inoltre deduco che per le due finestre andrai a creare 2 classi distinte. Per la seconda forse sarebbe più sensata una "dialog" (e "modale") ma questo lo puoi/devi valutarlo tu meglio di me.
    Ma a parte questo, alla seconda finestra andrai a passare 1 solo oggetto, appunto quello della ordinazione.

    Se inizi a modellare così le informazioni, ti assicuro che le cose ti risulteranno semplici e "liscie". Se ciascun cibo ha un prezzo differente, avere nelle combobox solo le stringhe dei nomi ti risulterà più difficile da gestire. E probabilmente arriverai a fare qualcosa di non proprio object-oriented.
  • Re: Chiarimenti per esercitazione :)

    andbin ha scritto:


    Ishima ha scritto:


    allora il prezzo varia e questo è un problema che intendo risolvere con dei vettori. Come faccio ad assegnare ad ogni riga (pietanza) un prezzo? Per adesso il problema principale è dare la prima schermata in output nella TextArea della seconda finestra
    Se ciascun cibo ha il suo prezzo allora devi modellare diversamente le cose. E il problema principale è appunto questo.
    Per "modellare" intendo dire che devi creare le classi necessarie a rappresentare logicamente le informazioni da gestire.

    Quindi, in prima battuta, una classe es. Cibo (o Portata) che contiene 2 informazioni: il nome (String) e il prezzo (double o int ... a seconda se vuoi con/senza decimali).
    Poi una classe es. Ordinazione che contiene i 6 cibi scelti e i due valori numerici per il numero tavolo e il numero persone.

    Inoltre deduco che per le due finestre andrai a creare 2 classi distinte. Per la seconda forse sarebbe più sensata una "dialog" (e "modale") ma questo lo puoi/devi valutarlo tu meglio di me.
    Ma a parte questo, alla seconda finestra andrai a passare 1 solo oggetto, appunto quello della ordinazione.

    Se inizi a modellare così le informazioni, ti assicuro che le cose ti risulteranno semplici e "liscie". Se ciascun cibo ha un prezzo differente, avere nelle combobox solo le stringhe dei nomi ti risulterà più difficile da gestire. E probabilmente arriverai a fare qualcosa di non proprio object-oriented.
    Non potrei creare un vettore di interi per i primi,secondi ecc.. Assegnare staticamente dei valori per esempio Primi[1]= 5 e poi andare a fare se il primo elemento della jcombo è selezionato allora ad un sommatore, per esempio S,uguale S+Primi[1]?
  • Re: Chiarimenti per esercitazione :)

    Ishima ha scritto:


    Non potrei creare un vettore di interi per i primi,secondi ecc.. Assegnare staticamente dei valori per esempio Primi[1]= 5 e poi andare a fare se il primo elemento della jcombo è selezionato allora ad un sommatore, per esempio S,uguale S+Primi[1]?
    Certo che tecnicamente è possibile. Ma scriveresti codice non buonissimo, non proprio object-oriented, poco manutenibile. Dipende da cosa ci si aspetta da te ...
  • Re: Chiarimenti per esercitazione :)

    andbin ha scritto:


    Ishima ha scritto:


    Non potrei creare un vettore di interi per i primi,secondi ecc.. Assegnare staticamente dei valori per esempio Primi[1]= 5 e poi andare a fare se il primo elemento della jcombo è selezionato allora ad un sommatore, per esempio S,uguale S+Primi[1]?
    Certo che tecnicamente è possibile. Ma scriveresti codice non buonissimo, non proprio object-oriented, poco manutenibile. Dipende da cosa ci si aspetta da te ...
    Sono uno studente e frequento il 4° insomma..comunque ho un altro problema.
     private void jComboBox3ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    
            int S=0;
            if (jComboBox3.getSelectedItem().equals("UOVO BIOLOGICO CROCCANTE “CACIO&PEPE” E CARCIOFI ALLA MENTA")){
             S=+1;
         }
            if (jComboBox3.getSelectedItem().equals("PESCE SPADA AFFUMICATO IN CASA CON INSALATINA ALL’ARANCIA")){
             S=+2;
         }
            if (jComboBox3.getSelectedItem().equals("CALAMARO RIPIENO DI FRUTTI DI MARE E GAMBERI, PAPPA AL POMODORO")){
             S=+3;
         }
            if (jComboBox3.getSelectedItem().equals("CAPESANTE ATLANTICHE IN CROSTA DI ‘NDUJA’ E CAPRESE DI BUFALA")){
             S=+4;
         }
            if (jComboBox3.getSelectedItem().equals("CARPACCIO DI FILETTO DI BUE DANESE CON RUCOLA E PARMIGIANO")){
             S=+5;
         }
            if (jComboBox3.getSelectedItem().equals("MAZZANCOLLE SCOTTATE CON LATTE DI COCCO, PASTA DI CURRY")){
             S=+6;
         }
            if (jComboBox3.getSelectedItem().equals("ANGUILLA AFFUMICATA, PANE AL NERO DI SEPPIA, MELA VERDE E SCORZA")){
             S=+7;
         }
        }                          
    il problema è che il metodo me lo crea direttamente privato e non so come cambiarlo,in questo modo non posso inserire il valore s nella textarea (ne ho creata una nella stessa finestra per evitare complicazioni) sottostante. Essendo private non può essere richiamata,che casino.
  • Re: Chiarimenti per esercitazione :)

    Ishima ha scritto:


    il problema è che il metodo me lo crea direttamente privato e non so come cambiarlo
    Questo non puoi ... se usi l'editor "visuale" di NetBeans. Lui ragiona così. Gli editor visuali di GUI hanno tutti le loro idiosincrasie, i loro limiti, ecc...
    Se invece creassi "a mano" tutto il codice per la gestione della GUI, allora puoi fare come ti pare.

    Ma il punto comunque non è questo. Un metodo di un listener è tipicamente invocato dal framework .... non dal tuo codice! Detto in altro modo: i metodi es. actionPerformed, mouseClicked ecc... NON li devi invocare tu.

    Ishima ha scritto:


    if (jComboBox3.getSelectedItem().equals("UOVO BIOLOGICO CROCCANTE “CACIO&PEPE” E CARCIOFI ALLA MENTA")){
    Una cosa del genere è proprio quello che dovresti evitare di fare.

    Ishima ha scritto:


    Essendo private non può essere richiamata,che casino.
    Ti ripeto che il problema non è questo.
  • Re: Chiarimenti per esercitazione :)

    andbin ha scritto:


    Ishima ha scritto:


    il problema è che il metodo me lo crea direttamente privato e non so come cambiarlo
    Questo non puoi ... se usi l'editor "visuale" di NetBeans. Lui ragiona così. Gli editor visuali di GUI hanno tutti le loro idiosincrasie, i loro limiti, ecc...
    Se invece creassi "a mano" tutto il codice per la gestione della GUI, allora puoi fare come ti pare.

    Ma il punto comunque non è questo. Un metodo di un listener è tipicamente invocato dal framework .... non dal tuo codice! Detto in altro modo: i metodi es. actionPerformed, mouseClicked ecc... NON li devi invocare tu.

    Ishima ha scritto:


    if (jComboBox3.getSelectedItem().equals("UOVO BIOLOGICO CROCCANTE “CACIO&PEPE” E CARCIOFI ALLA MENTA")){
    Una cosa del genere è proprio quello che dovresti evitare di fare.

    Ishima ha scritto:


    Essendo private non può essere richiamata,che casino.
    Ti ripeto che il problema non è questo.
    Grazie per il tuo tempo ma potresti farmi degli esempi direttamente col codice(per quanto riguarda la classe cibo,ecc..)? Il nostro professore ci fa usare il drag and drop senza scrivere il codice a mano.
  • Re: Chiarimenti per esercitazione :)

    Ishima ha scritto:


    ma potresti farmi degli esempi direttamente col codice(per quanto riguarda la classe cibo,ecc..)?
    Molto abbozzato e a pezzi (perché l'importante è che comprendi il senso e i concetti in generale):
    public class Cibo {
        private String descrizione;
        private double prezzo;
    
        // costruttore/i (es. uno che riceve le due informazioni)
    
        // metodi getter/setter, toString()
    }
    Il codice è molto abbreviato, credo (e spero vivamente) che ti siano state date le nozioni per creare una classe "bean" corretta con costruttori, metodi getter e/o setter ecc..

    Nota che per questo caso specifico, devi definire un toString() che restituisce la descrizione. Questo perché come vedrai tra poco, all'interno del JComboBox inserisco direttamente degli oggetti Cibo. E il renderer predefinito per i combobox fa nient'altro che visualizzare il risultato del toString() degli oggetti presenti nel combobox.

    Poi in una ipotetica classe per il frame principale:
    public class FramePrincipale extends JFrame {
        // .....
        private JComboBox<Cibo> antipastiComboBox;
        // .....
    
        public FramePrincipale() {
            // ...
            antipastiComboBox = new JComboBox<Cibo>();
            antipastiComboBox.addItem(new Cibo("UOVO BIOLOGICO CROCCANTE “CACIO&PEPE” E CARCIOFI ALLA MENTA", 2.99));
            antipastiComboBox.addItem(new Cibo("......", ......));
            // ....
        }
    
        // ....
    }
    La descrizione è scritta e inserita solo nel costruttore. Non dovrai usarla per altro (a meno di visualizzarla altrove), né tantomeno per farci degli equals!

    Poi in un actionPerformed per il pulsante del Calcola (ora non sto pensando come pensa NetBeans, quindi il metodo pulito per il listener):
    public void actionPerformed(ActionEvent e) {
        double totale = 0;
    
        Cibo antipastoScelto = (Cibo) antipastiComboBox.getSelectedItem();
        totale += antipastoScelto.getPrezzo();
    
        // .....
    }
    Come vedi è estremamente pulito. Nessun "if". Riottieni un oggetto Cibo che è quello scelto dall'utente.

    Ishima ha scritto:


    Il nostro professore ci fa usare il drag and drop senza scrivere il codice a mano.
Devi accedere o registrarti per scrivere nel forum
9 risposte