Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 14 su 14

Hybrid View

  1. #1
    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
    come fai tu a creare le interfaccie dinameche delle tue gui?
    L'array lo istanzierei come minimo dopo aver ricevuto quel numero dall'utente ...

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    non sapevo che si potesse scrivere:

    private JTextField JTF[] = new JTextField[nr];
    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)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    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...

  3. #3
    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

  4. #4
    Grazie andbin e complimenti. Il metodo che hai postato funziona però io non posso usarlo perché su una riga non ho un solo bottone ma ho molti componenti. Il problema non è del codice, infatti se adatto il tuo script al mio programma funziona alla perfezione, ma di swing. In sostanza la barra verticale funziona alla meraviglia ma quando stringo la finestra mi compare anche la barra orizzontale che se muovo da dei problemi. Per farti capire il problema ti posto questo codice perché a parole non sono buono:

    codice:
    package prova;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    class Esempio extends JFrame {
        private JTextField numTextField;
        private JPanel buttonsPanel;
        private JButton[] buttons = new JButton[0];
    
        public Esempio() {
            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, 200));
    
            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) {
                return;
            }
    
            if (num < 0) {
                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 Esempio().setVisible(true);
                }
            });
        }
    }
    Sopra vedi il problema di funzionamento di JScrollPane.
    Più pratica in futuro...

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.