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

    [JAVA] PROBLEMA CON JList

    codice:
    public class PannelloLista extends JPanel implements ActionListener, ListSelectionListener {
        private JTextField txt1;
        private JList lista;
        private JButton b;
        private JLabel txt2;
        private PanSocieta riferimento;
        private PanDitta riferimento2;
        private FinestraLista RIFERIMENTO;
        private ClienteDittaIndividuale c2;
        
    
        /** Metodo costruttore se chiamante è PanSocieta. */
        public PannelloLista(PanSocieta chiamante, FinestraLista CHIAMANTE) {
            super();
            
            setBackground(new Color(102,255,102));
            
            RIFERIMENTO = CHIAMANTE;
            riferimento = chiamante;
            
            txt1 = new JTextField("Lista dei clienti inseriti");
            txt1.setEditable(false);
            txt2 = new JLabel("Premere OK per chiudere la finestra");
            
            int lunghezza = riferimento.CLIENTI.length();
            String[] clienti = new String[lunghezza];
            clienti = riferimento.gc.getNomiClienti(riferimento.CLIENTI);
            lista = new JList(clienti);
            
            b = new JButton("  OK  ");
            b.addActionListener(this);
            
            add(txt1);
            add(lista);
            add(txt2);
            add(b);
        }
        
        
        
        /** Metodo costruttore se chiamente è PanDitta. */
        public PannelloLista(PanDitta chiamante, FinestraLista CHIAMANTE) {
            super();
            
            setBackground(new Color(102,255,102));
            
            RIFERIMENTO = CHIAMANTE;
            riferimento2 = chiamante;
            
            txt1 = new JTextField("Lista dei clienti inseriti");
            txt1.setEditable(false);
            txt2 = new JLabel("Premere OK per chiudere la finestra");
            
            int lunghezza = riferimento2.CLIENTI.length();
            String[] clienti = new String[lunghezza];
            clienti = riferimento2.gc.getNomiClienti(riferimento2.CLIENTI);
            lista = new JList(clienti);
            
            b = new JButton("  OK  ");
            b.addActionListener(this);
            
            add(txt1);
            add(lista);
            add(txt2);
            add(b);
        }
        
        /** Metodo per gestire eventi JButton. */
        public void actionPerformed(ActionEvent e) {
            /** Nascondo FinestraLista. */
            RIFERIMENTO.setVisible(false);
        }
        
        /** Metodo per gestire eventi JList. */
        public void valueChanged(ListSelectionEvent e) {
            String NOME = (String)lista.getSelectedValue();
            ClienteDittaIndividuale c = new ClienteDittaIndividuale(NOME);
            
            c2 = riferimento.gc.cercaCliente(riferimento2.CLIENTI, c);
            
            FinestraDatiCliente fin = new FinestraDatiCliente("Dati cliente");
            Container cont = fin.getContentPane();
            PannelloDatiCliente pan = new PannelloDatiCliente(this.c2, riferimento2.CLIENTI);
            cont.add(pan);
            fin.setVisible(true);
        }
    }
    Ho un problema con la gestione dell'evento JList; dovrebbe aprirsi una finestra con i dati
    del cliente cliccato, ma non si apre nessuna finestra!
    Qualcuno sa dirmi il perchè?
    GRAZIE MILLE!

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

    Re: [JAVA] PROBLEMA CON JList

    Originariamente inviato da ELY85
    Ho un problema con la gestione dell'evento JList; dovrebbe aprirsi una finestra con i dati
    del cliente cliccato, ma non si apre nessuna finestra!
    Qualcuno sa dirmi il perchè?
    Non vedo un lista.addListSelectionListener(this)
    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
    Mar 2005
    Messaggi
    225
    CHE SBADATA!!!!!

    GRAZIE!

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Come faccio a dire all'ascoltatore dell'evento JList che se il pannello Chiamante è PanDitta deve eseguire certe istruzioni, se invece il pannello chiamante è PanSocieta deve eseguire altre istruzioni?
    GRAZIE!

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ho modificato così il codice:
    codice:
    public class PannelloLista extends JPanel implements ActionListener, ListSelectionListener {
        private JTextField txt1;
        private JList lista, lista2;
        private JButton b;
        private JLabel txt2;
        private PanSocieta riferimento;
        private PanDitta riferimento2;
        private FinestraLista RIFERIMENTO;
        private ClienteDittaIndividuale c, c2;
        private FinestraDatiCliente RIFE;
        private FinestraDatiCliente2 RIFE2;
        
    
        /** Metodo costruttore se chiamante è PanSocieta. */
        public PannelloLista(PanSocieta chiamante, FinestraLista CHIAMANTE) {
            super();
            
            setBackground(new Color(102,255,102));
            
            RIFERIMENTO = CHIAMANTE;
            riferimento = chiamante;
            
            txt1 = new JTextField("Lista dei clienti inseriti");
            txt1.setEditable(false);
            txt2 = new JLabel("Premere OK per chiudere la finestra");
            
            int lunghezza = riferimento.CLIENTI.length();
            String[] clienti = new String[lunghezza];
            clienti = riferimento.gc.getNomiClienti(riferimento.CLIENTI);
            lista = new JList(clienti);
            lista.addListSelectionListener(this);
    
            
            b = new JButton("  OK  ");
            b.addActionListener(this);
            
            add(txt1);
            add(lista);
            add(txt2);
            add(b);
        }
        
        
        
        /** Metodo costruttore se chiamente è PanDitta. */
        public PannelloLista(PanDitta chiamante, FinestraLista CHIAMANTE) {
            super();
            
            setBackground(new Color(102,255,102));
            
            RIFERIMENTO = CHIAMANTE;
            riferimento2 = chiamante;
            
            txt1 = new JTextField("Lista dei clienti inseriti");
            txt1.setEditable(false);
            txt2 = new JLabel("Premere OK per chiudere la finestra");
            
            int lunghezza = riferimento2.CLIENTI.length();
            String[] clienti = new String[lunghezza];
            clienti = riferimento2.gc.getNomiClienti(riferimento2.CLIENTI);
            lista2 = new JList(clienti);
            
            b = new JButton("  OK  ");
            b.addActionListener(this);
            lista2.addListSelectionListener(this);
    
            
            add(txt1);
            add(lista2);
            add(txt2);
            add(b);
        }
        
        /** Metodo per gestire eventi JButton. */
        public void actionPerformed(ActionEvent e) {
            /** Nascondo FinestraLista. */
            RIFERIMENTO.setVisible(false);
        }
        
        /** Metodo per gestire eventi JList. */
        public void valueChanged(ListSelectionEvent e) {
            
            if(e.getSource()==lista2) {
                String NOME = (String)lista2.getSelectedValue();
                c = new ClienteDittaIndividuale(NOME);
            
                c2 = riferimento2.gc.cercaCliente(riferimento2.CLIENTI, this.c);
            
                FinestraDatiCliente fin = new FinestraDatiCliente("Dati cliente");
                Container cont = fin.getContentPane();
                RIFE = fin;
                PannelloDatiCliente pan = new PannelloDatiCliente(this.c2, riferimento2.CLIENTI, this.RIFE);
                cont.add(pan);
                fin.setVisible(true);
            }
            else {
                String NOME = (String)lista.getSelectedValue();
                c = new ClienteDittaIndividuale(NOME);
            
                c2 = riferimento.gc.cercaCliente(riferimento.CLIENTI, this.c);
            
                FinestraDatiCliente2 fin2 = new FinestraDatiCliente2("Dati cliente");
                Container cont = fin2.getContentPane();
                RIFE2 = fin2;
                PannelloDatiCliente2 pan2 = new PannelloDatiCliente2(this.c2, riferimento.CLIENTI, this.RIFE2);
                cont.add(pan2);
                fin2.setVisible(true);
            }
            
        }
    }
    1° PROBLEMA: ogni volta che apro FinestraDatiCliente oppure FinestraDatiCliente2 me ne apre due uguali, invece di una!!!

    2° PROBLEMA: se nella JList ho un cliente che mi arriva da PanSocieta(lista) e un altro che mi arriva da PanDitta(lista2), anche quando l'evento è generato da lista mi apre FinestradatiCliente per tutti e due i clienti!!

    PERCHE'????
    AIUUUUUUTOOO!!!!
    GRAZIE MILLE!

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Proprio non capisco!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Nessuno può aiutarmi?
    E' tutta la mattina che ci sono sopra....senza risolvere niente!

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ELY85
    1° PROBLEMA: ogni volta che apro FinestraDatiCliente oppure FinestraDatiCliente2 me ne apre due uguali, invece di una!!!
    Semplice: devi tenere in considerazione il valore fornito da getValueIsAdjusting() di ListSelectionEvent. Se ad esempio cambi la selezione con il mouse, vengono inviati 2 ListSelectionEvent, il primo con getValueIsAdjusting() a true e il secondo a false. (se invece usi le frecce solo 1 con false ma adesso, su due piedi, non saprei dirti perché).

    Originariamente inviato da ELY85
    2° PROBLEMA: se nella JList ho un cliente che mi arriva da PanSocieta(lista) e un altro che mi arriva da PanDitta(lista2), anche quando l'evento è generato da lista mi apre FinestradatiCliente per tutti e due i clienti!!
    Secondo me dovresti cambiare design. Hai 2 costruttori ma chiaramente quando istanzi un PannelloLista chiami o l'uno o l'altro. Quindi le varie duplicazioni di variabili (lista e lista2, riferimento e riferimento2) non hanno alcun senso.

    Rivedi bene il design!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ok...grazie!

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    "Secondo me dovresti cambiare design. Hai 2 costruttori ma chiaramente quando istanzi un PannelloLista chiami o l'uno o l'altro. Quindi le varie duplicazioni di variabili (lista e lista2, riferimento e riferimento2) non hanno alcun senso."

    Scusa ma riferimento e riferimento2 sono riferimenti a due pannelli diversi...!
    Se chiamo la JList lista per tutti e due i pannelli, come faccio a dire all'ascoltatore di eventi JList quale finestra aprire a seconda che il pannello chiamato sia PanSocietà o PanDitta?
    Non ho capito bene cosa mi suggerisci di fare!
    GRAZIE!

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.