glompos22 Δημοσ. 4 Φεβρουαρίου 2009 Δημοσ. 4 Φεβρουαρίου 2009 Εχώ ενα JFrame με BorderLayout και εχώ ενα JPanel στο CENTER. Όταν πατάω ενα κουμπί θέλω να αντικαθιστώ αυτο το JPanel με ένα αλλό. Μια ιδέα που έχω ειναι να κανω το παλιό JPanel setVisible(false) και να δημιουργό ενα καινούργιο JPanel στην θέση του, αλλά αυτό δεν μου φαίνεται και πολύ σωστό προγραματιστικα γιατί το παλίο JPanel δεν θα διαγράφει απο την μνήμη. Εγώ θέλω να το διαγράψω. Καμία ιδέα ???
ippo00 Δημοσ. 4 Φεβρουαρίου 2009 Δημοσ. 4 Φεβρουαρίου 2009 http://java.sun.com/javase/6/docs/api/java/awt/Container.html#removeAll() Πάντως το JFrame αποκλείεται να έχει borderlayout.
alex2005 Δημοσ. 4 Φεβρουαρίου 2009 Δημοσ. 4 Φεβρουαρίου 2009 Εχώ ενα JFrame με BorderLayout και εχώ ενα JPanel στο CENTER. Όταν πατάω ενα κουμπί θέλω να αντικαθιστώ αυτο το JPanel με ένα αλλό. Μια ιδέα που έχω ειναι να κανω το παλιό JPanel setVisible(false) και να δημιουργό ενα καινούργιο JPanel στην θέση του, αλλά αυτό δεν μου φαίνεται και πολύ σωστό προγραματιστικα γιατί το παλίο JPanel δεν θα διαγράφει απο την μνήμη. Εγώ θέλω να το διαγράψω. Καμία ιδέα ??? Η απάντηση που σου έδωσα στο άλλο forum δεν σου έκανε ε? Θέλεις να στείλεις τον κώδικα όταν προσπάθησες να κάνεις replace to content pane? http://java.sun.com/javase/6/docs/api/java/awt/Container.html#removeAll() Πάντως το JFrame αποκλείεται να έχει borderlayout. Το JFrame από μόνο του δεν έχει BorderLayout αλλά το contentPane στο JFrame έχει border layout. Αλήθεια γιατί σου φαίνεται περίεργο?
JavaMan Δημοσ. 7 Φεβρουαρίου 2009 Δημοσ. 7 Φεβρουαρίου 2009 Απλά έστω oldPanel το αρχικο που θες να διαγραφεί και newPanel το καινούριο που θες να εμφανίσεις τότε θα γραψεις.. frame.getContentPane().remove(oldPane);//Να πάψει να υπάρχει ως component του frame frame.getContentPane().add(newPane);//Να προστεθεί ως component του frame oldPane=null;//Το οποίο θα το γραψεις για να δειχνεις οτι οντως παύεις να το χρειάζεσαι και να φύγει από την μνήμη, καθώς δε θα υπάρχει reference
alex2005 Δημοσ. 7 Φεβρουαρίου 2009 Δημοσ. 7 Φεβρουαρίου 2009 Απλά έστω oldPanel το αρχικο που θες να διαγραφεί και newPanel το καινούριο που θες να εμφανίσεις τότε θα γραψεις.. frame.getContentPane().remove(oldPane);//Να πάψει να υπάρχει ως component του frame frame.getContentPane().add(newPane);//Να προστεθεί ως component του frame oldPane=null;//Το οποίο θα το γραψεις για να δειχνεις οτι οντως παύεις να το χρειάζεσαι και να φύγει από την μνήμη, καθώς δε θα υπάρχει reference Βασικά δεν νομίζω ότι χρειάζεται όλη αυτή η ιστορία. Αν απλά θέσει το καινούριο panel ως content pane τότε θα αντικαταστήσει και το reference από το JFrame. Πράγμα που σημαίνει πως ο gc θα το μαζέψει κάποια στιγμή και θα το διαγράψει από την μνήμη. [offtopic] JavaMan έριξα μία ματιά στο blog σου. Βρε παιδί μου πολύ cpu τρώει το scriptάκι που έχεις βάλει για το χιόνι. Σε Core2Duo T9300 2.5Ghz, το αποτέλεσμα είναι το παρακάτω, με και χωρίς javascript ενεργοποιημένη Σε FF 3.0.6 πάντα. [/offtopic]
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.