Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178

    Aggiornamento della window

    Salve,

    Non so il perché ma i componenti della JFrame non si aggiornano automaticamente. Ad esempio ho un Jbutton. Quando clicco sul JButton viene creata una JLabel e messa all'interno del contentPane. Il problema è che per aggiornare il tutto, devo muovere la dimensione della finestra per rendere visibile i componenti, in questo caso la JLabel.
    A me questa cosa pare strana. Di cosa si può trattare ?.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Il problema è che per aggiornare il tutto, devo muovere la dimensione della finestra per rendere visibile i componenti, in questo caso la JLabel.
    A me questa cosa pare strana.
    Infatti non dovrebbe succedere. Se succede è perché hai modificato strutturalmente un "contenitore" aggiungendo/togliendo componenti senza fare il necessario per aggiornare correttamente la UI, e come farlo varia a seconda se il contenitore ha un layout manager (e quale) oppure no.

    Precisa meglio il contesto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dopo che un contenitore (JFrame, JPanel, ecc) è stato reso visibile, tutte le modifiche devono essere seguite da un "refresh" manuale. Tale refresh lo fai chiamando semplicemente repaint() sul contenitore che deve essere aggiornato. A seconda di come viene gestito questo contenitore potrebbe essere necessario anche un rivalidamento delo stesso ( tramite doLayout() ).


    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

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    ( tramite doLayout() ).
    Scusa, preciso solo che dalla documentazione: Causes this container to lay out its components. Most programs should not call this method directly, but should invoke the validate method instead.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì, corretto... refuso di vecchie (brutte) abitudini... uso sempre il validate() ma ho in mente il doLayout(). Bah...
    "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

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178
    Quindi se ho dei componenti da aggiornare in un contenitore basta chiamare panel.repait() ?

    Ho provato ma non funziona:

    codice:
    getContentPane().add(panelA, BorderLayout.SOUTH)
    panelA.repaint();

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Quindi se ho dei componenti da aggiornare in un contenitore basta chiamare panel.repait() ?


    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Ho provato ma non funziona:

    codice:
    getContentPane().add(panelA, BorderLayout.SOUTH)
    panelA.repaint();
    Se il contenitore ha un layout manager (e perlomeno con quelli più semplici come BorderLayout, FlowLayout ecc.) di base basta un validate() invocato sul contenitore. E nel tuo caso il contenitore è il content pane.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178
    Quote Originariamente inviata da andbin Visualizza il messaggio



    Se il contenitore ha un layout manager (e perlomeno con quelli più semplici come BorderLayout, FlowLayout ecc.) di base basta un validate() invocato sul contenitore. E nel tuo caso il contenitore è il content pane.
    siiii funziona!!!

    grazie tante

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.