View Full Version : [JAVA] Riavviare JFrame
DevilMalak
30-05-2008, 21:50
Ciao a tutti... ho un evento che quando viene attivato deve resettare il JFrame togliendo alcuni oggetti che potrebbero essere nello schermo... c'è qualche modo per riavviare il JFrame allo stato iniziale? (Sono nella classe del JFrame stesso quindi non posso reinizializzare l'oggetto.. o c'è un modo?)
Non posso cancellare tutto il content pane perché alcune cose devono rimanere nel frame (tipo la menu bar in alto)
vincenzo83
31-05-2008, 14:00
Non sono il più adatto per una risposta adeguata ma ci prova lo stesso.
Prova ad utilizzare il metodo
remove(Component comp)
della classe JFrame, per rimuovere i componenti che desideri, dopodiché fai un
SwingUtilities.updateComponentTreeUI(myFrame);
per effettuare un aggiornamento del JFrame (myFrame deve essere un riferimento al tuo JFrame)
prova e fammi sapere.
EDIT: per utilizzare SwingUtilities.updateComponentTreeUI(myFrame) devi importare javax.swing.SwingUtilities
DevilMalak
31-05-2008, 17:32
grazie dell'aiuto ma il problema è che dentro al frame non sempre ci saranno gli stessi elementi quindi non posso rimuovere sempre qualcosa di specifico
Il metodo per aggiornare il JFrame dovrebbe essere myFrame.validate() a quanto so:stordita: ma magari sbaglio o fanno cose diverse...
Forse mi sono risolto da solo il problema mentre scrivevo questo reply:sofico: potrei inserire tutti gli elementi in alcuni JPanel e dopo (utilizzando proprio il metodo remove(comp) rimuoverei semplicemente tutti i JPanel (che non sarebbero più di 3 o 4 penso)
grazie comunque!:)
vincenzo83
31-05-2008, 18:54
Bene :)
Comunque giusto per la cronaca, esiste anche questo:
getComponents (http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Container.html#getComponents())
public Component[] getComponents()
Gets all the components in this container.
Returns:
an array of all the components in this container.
Considera che una volta recuperato l'array di Component, con il metodo getName() (http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#getName()) recuperi il nome del componente (conoscendo il nome, puoi decide se deve essere eliminato o meno ... credo)
Ma non ho mai usato questi metodi ... quindi non sono sicuro di quello che ho scritto.
DevilMalak
01-06-2008, 11:48
sì in qualche modo basterà cercare tutti i JPanel e cancellarli appena li trovo (magari con un ciclo for e il metodo getComponent(int i) al posto di getComponents():p )
grazie;)
Più tardi provo
DevilMalak
01-06-2008, 14:50
ho provato in tutti i modi ma non va.... :(
for (int i=0;i<this.getComponentCount();i++)
{
if (getComponent(i).equals(griglia))
{
remove(griglia);
remove(definizioni);
validate();
}
}
ho provato anche scrivendo soltanto griglia.setVisible(false) ma non va ugualmente...
(provato anche il metodo javax.swing.SwingUtilities.updateComponentTreeUI(this) citato sopra)
qualche altra idea o qualcuno sa se sbaglio qualcosa?:(
vincenzo83
01-06-2008, 15:04
ho provato in tutti i modi ma non va.... :(
for (int i=0;i<this.getComponentCount();i++)
{
if (getComponent(i).equals(griglia))
{
remove(griglia);
remove(definizioni);
validate();
}
}
ho provato anche scrivendo soltanto griglia.setVisible(false) ma non va ugualmente...
(provato anche il metodo javax.swing.SwingUtilities.updateComponentTreeUI(this) citato sopra)
qualche altra idea o qualcuno sa se sbaglio qualcosa?:(
Allora, non ho la possibilità di compilare in java ( … però devo dire che questa discussione mi fatto ritornare la voglia di fare qualche programma java).
Comunque, prova a mettere dei println per controllare il valore restituito da getComponentCount() e per vedere se entra almeno una volta nell’if; in questo modo cerchi di isolare il problema. Fammi sapere se ti trovi con i println.
EDIT: adesso non ricordo se è una cosa lecita ma, hai provato a sostituire
if (getComponent(i).equals(griglia))
con
if(getComponent(i) == griglia)
... considerando che stai cercando di vedere se fanno riferimento ad uno stesso oggetto ... prova :D
DevilMalak
01-06-2008, 16:24
risolto!! :D
Effettivamente entrava a malapena nel ciclo for perché contava un componente solo che non c'entrava nulla.... il metodo dell' == non ha funzionato(:p) ma mi è venuta l'idea stupida/geniale di creare una variabile d'istanza inizializzata a zero alla creazione del frame e poi fare così:
if (help>0) //la prima volta non si può eseguire l'operazione perché griglia e definizioni non sono state ancora create
{
griglia.setVisible(false);
definizioni.setVisible(false);
}
help++;
metodo stupidissimo che però funziona:sofico:
grazie mille per l'aiuto e il tempo dedicato ;)
vincenzo83
01-06-2008, 19:08
Bene, Ciaoo :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.