Visualizzazione dei risultati da 1 a 10 su 14

Hybrid View

  1. #1
    Quote Originariamente inviata da andbin Visualizza il messaggio
    L'array lo istanzierei come minimo dopo aver ricevuto quel numero dall'utente ...


    Scusa, non voglio "infierire" (ci mancherebbe) ma non eri tu che volevi arrivare alle web application? Queste sono "quisquilie", se "cadi" su queste cose, buonanotte .... (o perlomeno ... vuol dire che di strada ne hai moooolta davanti)
    Si ero io che volevo fare le web application. Ora che ho finito il libro sto pasticciando un po'. Comunque non ho proprio capito dove sbaglio, forse vedendo un esempio pratico potrei adattare la logica al mio codice ma diversamente non saprei proprio come fare. Le ho già provate tutte. E' chiaro che l'array l'ho instanziato dopo!
    Più pratica in futuro...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    forse vedendo un esempio pratico potrei adattare la logica al mio codice ma diversamente non saprei proprio come fare.
    Questo "dovrebbe" bastarti:

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    class UIDinamicaFrame extends JFrame {
        private JTextField numTextField;
        private JPanel buttonsPanel;
        private JButton[] buttons = new JButton[0];
    
        public UIDinamicaFrame() {
            super("UI Dinamica");
    
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(300, 250);
    
            numTextField = new JTextField();
            numTextField.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    generaPulsanti();
                }
            });
    
            buttonsPanel = new JPanel(new GridLayout(0, 1));
    
            JPanel containerPanel = new JPanel(new BorderLayout());
            containerPanel.add(buttonsPanel, BorderLayout.NORTH);
    
            JScrollPane scrollPane = new JScrollPane(containerPanel);
    
            getContentPane().add(numTextField, BorderLayout.NORTH);
            getContentPane().add(scrollPane, BorderLayout.CENTER);
    
        }
    
        private void generaPulsanti() {
            int num;
    
            try {
                num = Integer.parseInt(numTextField.getText());
            } catch (NumberFormatException nfe) {
                // TODO errore (non importante ai fini dell'esempio sul layout)
                return;
            }
    
            if (num < 0) {
                // TODO errore (non importante ai fini dell'esempio sul layout)
                return;
            }
    
            buttons = new JButton[num];
    
            buttonsPanel.removeAll();
    
            for (int i = 0; i < buttons.length; i++) {
                buttons[i] = new JButton("B" + (i+1));
                buttonsPanel.add(buttons[i]);
            }
    
            buttonsPanel.revalidate();
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new UIDinamicaFrame().setVisible(true);
                }
            });
        }
    }

    E se vuoi "capire" bene le cose, cerca di capire 2 aspetti particolari nel codice che ho scritto:

    a) Perché nel JScrollPane ho inserito containerPanel (che ha buttonsPanel in NORTH) e non direttamente buttonsPanel. C'è un motivo particolare per cui l'ho fatto. Più che altro per questioni "estetiche". Prova a mettere nel JScrollPane direttamente buttonsPanel e prova la differenza tra i due modi con tanti e pochi pulsanti. Entrambi i modi sono tecnicamente corretti ma il risultato estetico varia. Dipende cosa si vuole ottenere e/o piace ....

    b) Perché dopo le aggiunte nel pannello ho usato revalidate() invece che solo validate(). Anche qui c'è un motivo ben preciso che riguarda esclusivamente il fatto che il pannello che modifico è contenuto dentro il JScrollPane (direttamente o indirettamente, a seconda di a) ma non è questo importante). Prova ad usare validate() e a cambiare il numero.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.