Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225

    Oggetti Che Contengono Altri Oggetti

    Ciao a tutti!
    Ho di nuovo un problema!

    Ho degli oggetti di classe INGREDIENTE (precisamente una lista di oggetti della classe
    INGREDIENTE) e vorrei passare questa lista come parametro al costruttore della classe PRODOTTO che ho creato!

    Cioè: ogni oggetto PRODOTTO deve contenere una lista di oggetti INGREDIENTE!


    Come posso fare?
    Qualcuno può aiutarmi?

    GRAZIE!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Oggetti Che Contengono Altri Oggetti

    Originariamente inviato da ELY85
    Ciao a tutti!
    Ho di nuovo un problema!

    Ho degli oggetti di classe INGREDIENTE (precisamente una lista di oggetti della classe
    INGREDIENTE) e vorrei passare questa lista come parametro al costruttore della classe PRODOTTO che ho creato!

    Cioè: ogni oggetto PRODOTTO deve contenere una lista di oggetti INGREDIENTE!


    Come posso fare?
    Qualcuno può aiutarmi?
    Esempio:
    codice:
    import java.util.*;
    
    public class Prodotto
    {
        private ArrayList<Ingrediente> ingredienti;
    
        public Prodotto (Collection<Ingrediente> ingredienti)
        {
            this.ingredienti = new ArrayList<Ingrediente> (ingredienti);
        }
    
        //......
    }
    Poi ad esempio puoi fare:
    codice:
    ArrayList<Ingrediente> list = new ArrayList<Ingrediente> ();
    
    //... riempi list
    
    Prodotto p = new Prodotto (list);
    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
    Aug 2002
    Messaggi
    8,013
    Come è implementata la tua lista di INGREDIENTE? Un semplice array? un Vector? Una List un Set o altra entità di Collection? Puoi tranquillamente passare il tutto come parametro del tuo costruttore... per esempio se fosse un array

    codice:
    public class PRODOTTO {
      ...
      ...
      public PRODOTTO(INGREDIENTE[] ingr, ...) {
        ...
      }
      ...
      ...
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Intanto, prima si scegliere la struttura dati da utilizzare, dovresti considerare de tale lista puo' essere poi modificata aggiungendo e/o togliendo ingredienti e se su essa possono essere fatte delle "ricerche".
    Una volta che hai scelto la struttura basta realizzare una procedura che come tipo di argomento abbia quello della struttura scelta.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Grazie a tutti!
    Ora ci provo!


  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ho fatto come mi avete suggerito ma c'è ancora un problema.
    Vi mando il codice e vi spiego.

    CLASSE PANNELLO INGREDIENTE:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.util.*;

    public class PannelloIngredienti extends JPanel implements ActionListener {

    private JTextField jtfNomeI, jtfPer;
    private JButton b1, b2;


    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    /**
    * Invoco il paintComponent della superclasse.
    */

    setBackground(new Color(230,246,134));



    jtfNomeI = new JTextField("INGREDIENTE",18);
    jtfPer = new JTextField("PERCENTUALE",18);

    jtfNomeI.setEditable(true);
    jtfPer.setEditable(true);

    b1 = new JButton("INSERISCI");
    b2 = new JButton("RIMUOVI");

    b1.addActionListener(this);
    b2.addActionListener(this);

    add(jtfNomeI);
    add(jtfPer);
    add(b1);
    add(b2);
    }

    public void actionPerformed (ActionEvent e) {
    ArrayList<Ingrediente> list = new ArrayList<Ingrediente> ();

    if(e.getSource() == b1) {
    Ingrediente i = new Ingrediente(jtfNomeI.getText(), jtfPer.getText());

    list.add(i);
    }

    else {
    list.remove(new Ingrediente(jtfNomeI.getText(), jtfPer.getText()));
    }
    }


    }


    CLASSE PANNELLO PRODOTTO:

    import java.util.*;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import javax.swing.event.*;

    public class Pannelloprodotto extends JPanel implements ActionListener {


    JButton b1, b2;

    JTextField jtfCodice;
    JTextField jtfNome;

    public Pannelloprodotto() {
    super();

    setBackground(new Color(188,241,181));

    jtfCodice = new JTextField("CODICE PRODOTTO",18);
    jtfNome = new JTextField("NOME PRODOTTO",18);

    jtfCodice.setEditable(true);
    jtfNome.setEditable(true);



    b1 = new JButton("INSERISCI INGREDIENTE");
    b1.addActionListener(this);
    b2 = new JButton("SALVA");
    b2.addActionListener(this);

    setLayout(new FlowLayout(FlowLayout.CENTER,5,30));

    add(jtfCodice);
    add(jtfNome);
    add(b1);
    add(b2);



    }

    public void actionPerformed(ActionEvent e) {


    if(e.getSource()==b1) {
    FinestraIngredienti finIng = new FinestraIngredienti();
    Container cont = finIng.getContentPane();
    PannelloIngredienti pan = new PannelloIngredienti();
    cont.add(pan);
    finIng.show();
    }

    else {
    Prodotto p = new Prodotto(jtfCodice.getText(), jtfNome.getText(), list);
    ArrayList<Prodotto> PRODOTTI = new ArrayList<Prodotto> ();
    PRODOTTI.add(p);
    }
    }


    }

    list tra i parametri di Prodotto non viene trovata perchè l'ArrayList list è nell'altro pannello!
    Come devo fare per fargliela "vedere"?
    GRAZIE!

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Nessuno può aiutarmi?

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Se dichiari una qualsiasi variabile all'interno di un blocco, cioe' tra una parte di codice tra {}, questa variabile termina la sua vita alla fine del blocco stesso. Se vedi i suggerimenti che ti erano stati dati, la lista veniva solo inizializzata all'interno di un costruttore o metodo, mentre veniva dichiarata come variabile d'istanza a livello di classe.
    Cerca di separare un po' la parte grafica dalla parte logica della tua applicazione.
    Per la parte logica ti serve una struttura tipo, o qualcosa di analogo.
    -classe prodotto. Contiene una lista di ingredienti e fornisce i metodi per accedervi
    -classe Ingrediente.
    La parte grafica deve istanziare oggetti di questo tipo e interagirvi attraverso i metodi degli oggetti stessi.
    Poi non e' una buona idea sovrascrivere il metodo paintComponent per le operazioni che hai fatto tu. Puoi benissimo mettere queste operazioni nel costruttore della classe.
    Devi fornire dei metodi per far comunicare le varie classe, tipo passare dei riferimenti.
    Potresti prendere in considerazione anche l'uso di JDialog viste il tipo di operazioni che mi pare tu voglia fare con queste due componenti grafiche.
    Insomma c'e' un po' di confusione generale.
    Prova a spiegare cosa dovrebbe fare in sintesi tutta la tua applicazione e come l'hai progettata/realizzata fino ad ora.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Intanto grazie per i tuoi consigli....sono agli inizi come hai potuto constatare!

    Devo fare un programma per la gestione di un forno!

    Ho creato una classe CLIENTE, una classe INGREDIENTE e l'altra PRODOTTO.
    Poi mi servirà un'altra classe per calcolare le DOSI (cioè la quantità di ingredienti per ogni tipo di prodotto che serve per ottenere il quantitativo di pane ordinato dai clienti).

    Quello che vorrei realizzare è più o meno questo: la prima volta che viene utilizzato il programma l'utente deve inserire i CLIENTI, i PRODOTTI con i relativi INGREDIENTI e la PERCENTUALE che l'ingrediente ha nell'impasto di quel prodotto. Questi dati devono rimanere memorizzati anche quando il programma viene chiuso.

    Fatto questo, l'utente deve inserire l'ordine giornaliero di ciascun cliente (sulla base del quale verranno calcolte le dosi). Gli ordini giornalieri devono resettarsi una volta chiuso il programma.

    Quando sono stati inseriti tutti gli ordini di tutti i clienti, l'utente desidera:
    - una stampa degli ordini dei clienti;
    - una stampa con i totali di ciascun prodotto;
    - una stampa dei totali di ciascun prodotto con le relative dosi.

    Questo è quello che dovrei realizzare!!!! E per me è un po' difficile dato che è la prima volta che mi cimento in un programma di queste dimensioni!

    Per ora quello che ho fatto è questo:
    - ho realizzato la finestra principale del programma con il menù;
    - una classe CLIENTE con un costruttore che richiede come parametri un codice ed un nome;
    - una FINESTRA per permettere all'utente di inserire/rimuovere un cliente (ogni cliente viene salvato in una Lista implementata con array);

    E adesso ero alle prese con prodotti ed ingredienti.

    COSA NE PENSI?
    MI PUOI DARE UNA MANO AD IMPOSTARE IL PROGRAMMA?
    PUO' ANDARE QUELLO CHE HO FATTO FINORA? COSA NON VA?

    P.S. Nel programma devo assolutamente usare:
    - interfaccia grafica;
    - incapsulamento;
    - ereditarietà progettata per il programma
    - polimorfismo
    - Input/Output
    - una struttura dati tra liste, code, pile, alberi binari.


    SPERO CHE TU SIA COSI' GENTILE E PAZIENTE DA AIUTARMI!
    GRAZIE MILLE

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ok, lasciamo perdere un istante la parte grafica. Io solitamente preferisco partire dal back-end dell'applicazione e far per ultime le eventuali interfaccie.
    Allora, Cliente l'hai gia' fatto, quindi tira giu' Prodotto e Ingrediente,
    Ingrediente avra' il suo bel costruttore, le sue belle variabili d'istanza private e i metodi per acccedervi.
    Prodotto idem, ma in particolare una delle sue variabili sara' di tipo ArrayList<prodotti> e avra i metodi per aggiungere e rimuovere l'ingrediente dalla lista. Questa' e' la parte che tu stavi cercando di fare nella parte grafica, ma in realta' e' deve stare qua. La parte Grafica istanziera oggetti di questo tipo e usera i loro metodi per memorizzare/accedere alle info delle variabili.

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.