Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49

    dove sbaglio????

    Ragazzi quello che vi posto è un semplicissimo programma che comprende: Un campo di testo una JList e un bottone.

    Al click sul bottone, il contenuto della casella di testo dovrebbe essere aggiunto alla Jlist ma purtroppo non succede niente.

    codice:
     
    
    import java.awt.BorderLayout; 
    
    import javax.swing.DefaultListModel; 
    import javax.swing.JPanel; 
    import javax.swing.JFrame; 
    import javax.swing.JButton; 
    import java.awt.Rectangle; 
    import javax.swing.JScrollPane; 
    import javax.swing.JList; 
    import java.awt.Dimension; 
    import javax.swing.JTextField; 
    
    public class List extends JFrame { 
    
        private static final long serialVersionUID = 1L; 
        private JPanel jContentPane = null; 
        private JButton jButton = null; 
        private JScrollPane jScrollPane = null; 
        private JList jList = null; 
        private DefaultListModel listModel = null; 
        private JTextField jTextField = null; 
    
        public List() { 
            super(); 
            initialize(); 
        } 
        private void initialize() { 
            this.setSize(300, 232); 
            this.setContentPane(getJContentPane()); 
            this.setTitle("JFrame"); 
        } 
        private JPanel getJContentPane() { 
            if (jContentPane == null) { 
                jContentPane = new JPanel(); 
                jContentPane.setLayout(null); 
                jContentPane.add(getJButton(), null); 
                jContentPane.add(getJScrollPane(), null); 
                jContentPane.add(getJTextField(), null); 
            } 
            return jContentPane; 
        } 
        private JButton getJButton() { 
            if (jButton == null) { 
                jButton = new JButton(); 
                jButton.setBounds(new Rectangle(63, 148, 162, 37)); 
                jButton.addActionListener(new java.awt.event.ActionListener() { 
                    public void actionPerformed(java.awt.event.ActionEvent e) { 
                        listModel = new DefaultListModel(); 
                        listModel.addElement(jTextField.getText()); 
                        jList = new JList(listModel); 
                    } 
                }); 
            } 
            return jButton; 
        } 
        private JScrollPane getJScrollPane() { 
            if (jScrollPane == null) { 
                jScrollPane = new JScrollPane(); 
                jScrollPane.setBounds(new Rectangle(62, 46, 165, 92)); 
                jScrollPane.setViewportView(getJList()); 
            } 
            return jScrollPane; 
        } 
        private JList getJList() { 
            if (jList == null) { 
                jList = new JList(); 
                jList.setModel(new DefaultListModel()); 
                jList.setVisibleRowCount(-1); 
            } 
            return jList; 
        } 
        private JTextField getJTextField() { 
            if (jTextField == null) { 
                jTextField = new JTextField(); 
                jTextField.setBounds(new Rectangle(62, 4, 164, 33)); 
            } 
            return jTextField; 
        } 
    }

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

    Re: dove sbaglio????

    Originariamente inviato da Vbnet
    Al click sul bottone, il contenuto della casella di testo dovrebbe essere aggiunto alla Jlist ma purtroppo non succede niente.
    Nel actionPerformed viene creato un nuovo list model (e già questo non sarebbe appropriato se vuoi "aggiungere" elementi!) ma la cosa ancora peggiore è che istanzi un nuovo JList e lo assegni alla variabile di istanza. Non succede nulla a video ... hai solo cambiato una variabile di istanza. E non è comunque appropriato se vuoi "solo" aggiungere elementi.

    Istanzia 1 volta sola (e tieniti il reference) il DefaultListModel e nel actionPerformed aggiungi l'elemento nella lista usando addElement() del DefaultListModel.

    E infine una considerazione. Li vedi tutti quei metodi privati getXXX() chiamati in cascata?? Sicuramente l'ha generato un IDE .... ed è solo brutto, lungo e fumoso. Scrivi tu il codice per la interfaccia utente e fai il setup della interfaccia utente in un unico step (es. in un metodo apposito o anche direttamente nel costruttore). E usa i layout manager!
    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
    May 2008
    Messaggi
    49
    Ciao AndBin
    innanzitutto grazie per la risposta.
    Temevo si trattasse di una cosa del genere.
    Non riesco a capire però 2 cose:

    1) se faccio in qs modo:
    codice:
    private JList getJList() {
    		if (jList == null) {
    			jList = new JList();
    			jList.setModel(new DefaultListModel());
    			jList.setVisibleRowCount(-1);
    			listModel = new DefaultListModel();
    			listModel.addElement("elemento1");
    			jList = new JList(listModel);
    		}
    		return jList;
    allora all'avvio dell'applicazione l'elemento: "elemento1" appare nella mia JList
    anche in qs caso ho istanziato due jList.

    2) jList non ha il metodo addElement quindi se gia la istanzio nel metodo getJList per fare in modo che venga caricata all'avvio dell'applicazione, come faccio poi nell'evento actionperformed del bottone ad aggiungere elementi alla jlist senza utilizzare il comando:
    jList = new JList(listModel);??

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Vbnet
    2) jList non ha il metodo addElement
    Ho detto di DefaultListModel .... non di JList.

    Originariamente inviato da Vbnet
    come faccio poi nell'evento actionperformed del bottone ad aggiungere elementi alla jlist senza utilizzare il comando:
    jList = new JList(listModel);??
    Ripeto: lo aggiungi tramite il DefaultListModel!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    perfetto
    ho sistemato il codice evitando di istanziare nuovi controlli ed ora funziona alla grande.
    Grazie mille per la dritta

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Magari per le prossime volte, cerca anche di usare dei titoli che abbiano un senso... come espressamente richiesto dal regolemento.
    "Dove sbaglio??" si adatta perfettamente alla totalità delle discussioni presenti su questo forum per i più disparati argomenti...

    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

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    si hai perfettamente ragione!!
    Grazie mille ancora

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.