Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Ricostruire la GUI dalla GUI

    Ho creato un metodo che quando scrivo un valore dentro una JtextField e premo invio modifica il valore di una variabile (nr_scelte) che all'atto della creazione della GUI serve per stabilire quanti pulsanti disegnare. Il metodo funziona ma la GUI non si ricostruisce così mi sorge la domanda:
    Devo usare gli osservatori per ricostruire la GUI? Non c'è qualche metodo semplificato che renderizza nuovamente la GUI grafica della mia applicazione?

    Ciao e grazie

    Ecco il codice:

    codice:
    public class InterfacciaGrafica extends JFrame {
    
     ...
    
    private void modofica_numero_scelte(KeyEvent evt) {
            if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                try {
                    nr_scelte = Integer.parseInt(JTF_scelte.getText()
                            .toString());
                } catch (Exception e) {
                 nr_scelte = 3;
                }
            }
        }
     
    ...
    
    public InterfacciaGrafica() {
    
    ...
    
    JTF_scelte = new JTextField("3", 5);
            JTF_scelte.setHorizontalAlignment(JTextField.CENTER);
            JTF_scelte.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent evt) {
                    modofica_numero_scelte(evt);
                }
            });
    
    ...
    
    }
     
    public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
    InterfacciaGrafica interfaccia = new InterfacciaGrafica();
                    interfaccia.setVisible(true);
                }
            });
        }
    }

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    se non ricordo male devi chiamare il metodo invalidate() da qualche parte. Prova a fare qualche ricerca.

    PS. Questo è probabilmente il suggerimento più preciso e circostanziato della storia! Se non ricordo male...... da qualche parte......

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Devi validare la GUI in modo che poi venga ridisegnata correttamente.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Quote Originariamente inviata da minomic Visualizza il messaggio
    Ciao,
    se non ricordo male devi chiamare il metodo invalidate() da qualche parte. Prova a fare qualche ricerca.

    PS. Questo è probabilmente il suggerimento più preciso e circostanziato della storia! Se non ricordo male...... da qualche parte......

    Ho provato a mettere il metodo da ogni parte ma non succede nulla.

  5. #5
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Devi validare la GUI in modo che poi venga ridisegnata correttamente.
    Ovvero?

    Applet ha il famoso repaint mentre JFrame sembra che non abbia nulla...

  6. #6
    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
    Ho creato un metodo che quando scrivo un valore dentro una JtextField e premo invio modifica il valore di una variabile (nr_scelte) che all'atto della creazione della GUI serve per stabilire quanti pulsanti disegnare. Il metodo funziona ma la GUI non si ricostruisce
    Se vuoi modificare il contenuto di un "contenitore" (aggiungere/rimuovere componenti) dopo che il contenitore è già visibile, dopo le modifiche basta in genere fare un validate() sul contenitore. Questo perlomeno vale con i layout manager basilari e in generale salvo cavilli strani con certi l.m. (uno su tutti con cui ho avuto problemi in passato: GridBagLayout).

    Se il contenitore non ha un layout manager, validate() non serve. Basta invece un repaint() sul contenitore (chiaramente dopo aver posizionato/dimensionato esplicitamente i componenti eventualmente aggiunti).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Il fulcro del problema è racchiuso in questo vettore:

    private Object JTF[] = new Object[nr];

    che viene definito nella classe che estende il JFrame. JTF è un vettore che contiene delle JTextField e serve per costruire una GUI. 'nr' è la stringa convertita in intero definita in una JTextField "statica". In pratica io vorrei scrivere 5 in quest'ultima, premere invio creare un vettore di questo tipo:

    private Object JTF[] = new Object[5];

    e generare nella GUI 5 JTextField "dinamiche." Scrivo "dinamiche" perché se cancello 5, scrivo 10 e premo invio desiderei che alla GUI venissero aggiunte altre 3 JTextField.

  8. #8
    Ho provato a creare un metodo di questi tipo:

    codice:
    JTF_scelte = new JTextField("10", 5);
            JTF_scelte.setHorizontalAlignment(JTextField.CENTER);
            JTF_scelte.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent evt) {
                    modofica_numero_scelte(evt);
                }
    
                 private void modofica_numero_scelte(KeyEvent evt) {
                    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                        try {
                            nr_scelte = Integer.parseInt(JTF_scelte.getText()
                                    .toString());
                            pannello_scelte.validate();
                        } catch (Exception e) {
                         nr_scelte = 10;
                            pannello_scelte.validate();
                        }
                    }
                }
            });
    che chiama il vostro metodo .validate(); sul JPanel 'pannello_scelte' ma non accade nulla...
    'pannello_scelte' contiene le JTextField dinamiche...

  9. #9
    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
    private Object JTF[] = new Object[nr];

    che viene definito nella classe che estende il JFrame. JTF è un vettore che contiene delle JTextField
    E se deve contenere esclusivamente JTextField, perché complicarsi la vita usando un array di Object? Tecnicamente sarebbe meglio:

    private JTextField JTF[] = new JTextField[nr];

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    'nr' è la stringa convertita in intero definita in una JTextField "statica". In pratica io vorrei scrivere 5 in quest'ultima, premere invio creare un vettore di questo tipo:

    private Object JTF[] = new Object[5];
    Il punto comunque non è tanto il tipo (come ho detto sopra) ma un altro. Questa variabile è "di istanza", viene inizializzata quando la istanza della classe che la contiene viene creata. Quindi new Object[nr] viene eseguito con il valore di nr che c'è in quel momento ..... non di quando tu leggi e fai parse del valore dal text field!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    e quindi? come fai tu a creare le interfaccie dinameche delle tue gui?

    cavolo andbin non sapevo che si potesse scrivere:

    private JTextField JTF[] = new JTextField[nr];



    se lo sapevo prima mi sarei risparmiato parecchio lavoro...

    grazie per la chicca!
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.