Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225

    [Java] Problema con Finestra/JList

    Ciao a tutti!
    Sto facendo un programma in cui l'utente, tra le altre cose, deve inserirvi dei clienti. Ogni volta che ne inserisce uno, salvo l'oggetto cliente creato in una lista (non JList).
    Da questa lista devo prendere il nome del cliente inserito e passarlo ad una Finestra che contiene una JList!

    Il problema è proprio questo: devo creare la finestra contenente la JList una volta sola, e man mano che inserisco o rimuovo clienti devo aggiornare la JList! Come si fa?? Non ho idee al momento!

    Altro problema: ho istanziato la lista (non JList) nel costruttore del pannello che la contiene, ma ogni volta che apro la finestra con quel pannello ne istanzio una nuova, giusto? E se ogni volta che creo un pannello creo una lista nuova, i dati esistenti vengono persi! Perciò dove posso crearla?

    GRAZIE MILLE!
    Spero di essere stata chiara!

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    http://java.sun.com/javase/6/docs/ap...a.util.Vector)
    la seconda domanda è complicata e se non dici la struttura della tua applicazione è impossibile
    un consiglio: http://java.sun.com/javase/6/docs/api/ SEMPRE aperto

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Poi, giusto per conoscenza, esiste anche il paradigma Observer / Observable che può esserti d'aiuto per risolvere il primo problema.
    Il concetto è semplice e in Java si implementa in modo veramente limpido: hai un oggetto che ha la caratteristica di poter essere Osservato (e questo potrebbe essere la tua classe con la lista) da tanti Osservatori. Quando l'oggetto cambia, tutti gli osservatori vengono notificati di questo cambiamento (e, di conseguenza, faranno quello che devono fare in virtù del cambiamento avvenuto).

    Vediamo, quindi, come potrebbe essere applicata questa "filosofia" alla tua applicazione:

    Hai la tua lista di clienti (che può essere un Vector, un Array o qualunque cosa tu voglia) che è un membro (pubblico o privato non ha nessuna importanza) di una tua classe. Chiamiamo questa classe Osservato.
    Poi hai l'interfaccia grafica che contiene la JList. L'interfaccia grafica è interessata a sapere quando la tua lista viene modificata (perchè un cliente viene aggiunto o tolto, o anche solo modificato, vedi tu...). Quindi l'interfaccia grafica diventa l'osservatore.
    Quando la tua lista viene modificata, la classe Osservato richiamerà un metodo (notifyObservers()) e tutti gli osservatori (in questo caso solo l'interfaccia grafica) verranno notificati del cambiamento e riceveranno una copia dell'oggetto Osservato.

    Per poter avere ulteriori informazioni su questo paradigma, puoi consultare la documentazione:
    Observer
    Observable

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    GRAZIE A TUTTI!

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Per il secondo problema vi mando questa classe:

    codice:
    public class PanSocieta extends JPanel implements ActionListener {
        
        protected JTextField t1, t2, t3, t4, t5;
        protected JLabel j1, j2, j3, j4, j5;
        protected JButton b1, b2;
        public ListNode CLIENTI;
        public ClienteSocieta c;
    
        public PanSocieta() {
            super();
            
            CLIENTI = new ListNode();  // Istanzio la lista
            
            setBackground(new Color(65,208,223));
            
            j1 = new JLabel("Codice cliente:");
            j2 = new JLabel("Nome ditta:");
            j3 = new JLabel("Indirizzo sede:");
            j4 = new JLabel("Partita IVA:");
            j5 = new JLabel("Telefono:");
            
            t1 = new JTextField(20);
            t2 = new JTextField(20);
            t3 = new JTextField(20);
            t4 = new JTextField(20);
            t5 = new JTextField(20);
            t1.setEditable(true);
            t2.setEditable(true);
            t3.setEditable(true);
            t4.setEditable(true);
            t5.setEditable(true);
            
            b1 = new JButton("INSERISCI");
            b2 = new JButton("RIMUOVI");
            b1.addActionListener(this);
            b2.addActionListener(this);
            
            
                    
            add(j1);
            add(t1);
            add(j2);
            add(t2);
            add(j3);
            add(t3);
            add(j4);
            add(t4);
            add(j5);
            add(t5);
            add(b1);
            add(b2);
        }
        
        public void actionPerformed(ActionEvent e) {
            
            if (e.getSource()==b1) {
                c = new ClienteDittaIndividuale(t1.getText(), t2.getText());
                
                CLIENTI.insert(c); //Inserisco il cliente creato nella lista
                
                c.salvaListaClienti(CLIENTI); 
                String[] NOMI = c.getNomiClienti(CLIENTI);
                System.out.println("Clienti presenti nella ListNode: ");
                int l = CLIENTI.length();
                for(int i=0; i<l; i++) System.out.println(NOMI[i]);    
                c.leggiCliente();
                
                FinestraLista fl = new FinestraLista("Lista clienti");
                Container cont = fl.getContentPane();
                PannelloLista pl = new PannelloLista(this);
                cont.add(pl);
                fl.setVisible(true);
                
                FinestraDomanda fd = new FinestraDomanda();
                Container c = fd.getContentPane();
                PannelloDomanda pd = new PannelloDomanda();
                c.add(pd);
                fd.setVisible(true);
            }
            
            else {
                CLIENTI.remove(new ClienteDittaIndividuale(t1.getText(), t2.getText()));
                c.salvaListaClienti(CLIENTI); 
                c.leggiCliente();
            }
                
        }
        
    }
    Nel Costruttore del pannello istanzio la ListNode CLIENTI, perciò ogni volta che istanzio il pannello, mi istanzia una ListNode nuova, col risultato che in ogni ListNode ho un solo oggetto cliente, invece di averli tutti in una sola ListNode!
    Quindi non devo istanziare qui la lista, ma allora dove?
    GRAZIE!

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    ...
    private ListNode CLIENTI;
    
    public PanSocieta(ListNode CLIENTI) {
      super();
      this.CLIENTI = CLIENTI;
      ...
    Ossia dove istanzi il JPanel, passi anche la lista attuale.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    GRAZIE MILLE!!

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.