|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 5545
|
[JAVA] Uso di SwingUtilities.invokeLater
Ciao, vi illustro la situazione:
Ho una finestra creata in Swing, contenente un pannello vuoto e una voce di menu in alto dove alla sua pressione si apre il browsing del file system per selezionare un file (JFileChooser). Alla selezione del file ho bisogno di agire sul pannello vuoto, disegnando un oggetto di tipo JTree. Qui nasce il problema, nel momento in cui io aggiungo l'oggetto JTree al mio pannello, qual'è la procedura corretta per "ri-disegnare" qualcosa sul mio frame / finestra? Girovangando su internet ho scoperto che è possibile, una volta aggiunto l'oggetto al mio pannello, richiamare il setVisibile direttamente dal frame: Codice:
pannello.add(jtree); frame.setVisible(true); uso e consigliavano vivamente l'uso del InvokeLater senza bisogno del setVisibile nuovamente. Nel mio caso: Codice:
SwingUtilities.invokeLater ( new Runnable() { public void run() { pannello.add(jtree); } } ); di prima, non fa proprio nulla. Sapete aiutarmi come si deve agire ogni volta per ri-disegnare qualcosa su un frame? Vi ringrazio ![]()
__________________
Matthewx Ultima modifica di futu|2e : 01-07-2011 alle 21:41. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Confesso di non aver capito quale è il problema, forse uno spezzone di codice aiuterebbe.
Comunque: SwingUtilities.invokeLater (o EventQueue.invokeLater, è lo stesso) serve ad accodare del codice (il Runnable) nella event queue di swing/awt in modo che venga poi processato in modo asincrono dall'edt (event dispatcher thread) il thread che in Swing/Awt processa tutti gli eventi grafici. Per "ridisegnare" il componente prova con un repaint e se non bastasse un revalidate
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
tutte le operazioni su componenti swing vanno fatte nell'edt, perché siano thread safe, e quindi non nel main.. non a caso tutti gli esempi sul sito di oracle sono fatti in questo modo http://download.oracle.com/javase/tu...orldSwing.java
|
![]() |
![]() |
![]() |
#4 | ||
Senior Member
Iscritto dal: Sep 2007
Messaggi: 5545
|
Quote:
e disegnato una finestra contenente pannelli, come fare per disegnarci sopra in un secondo momento altri oggetti dentro ai pannelli. Quote:
e vi farò sapere. Grazie
__________________
Matthewx |
||
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Nel primo caso si tratta di invocare un aggiornamento del rendering con repaint o revalidate, nel secondo caso è tutta un'altra faccenda. P.S.: se posti il codice probabilmente si fa prima.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:05.