Page 1 of 1

Πως κανω update σε ενα JFrame και στα περιεχομενα του;

Posted: Sun Mar 19, 2006 7:25 pm
by nocturna_gr
Γεια,
Εχω "class A extends JFrame", "class B extends JPanel" & "class C extends JPanel". Tα αντικειμενα των ταξεων Β και C εχουν προστεθει πανω σε ενα αντικειμενο του Α. Υπαρχει καποια μεθοδος διεπαφης/ταξης Listener, τετοια ωστε οταν γινεται οποια αλλαγη στο Β ή C, να την καταλαβαινει ο Α;

Posted: Sun Mar 19, 2006 11:56 pm
by Tomahawk
Μια καλη λυση ειναι να κανεις τις κλασεις Β και C να κανουν extend το Observable interface και η κλαση Α το interface Observer.Οταν φορτωνει η κλαση Α κανει register στις κλασεις που θελει να παρακολουθει για αλλαγες (Β και C) με την κληση addObserver(this).Οταν οι observable κλασεις (στην περιπτωση σου B and C) αντιληφθουν οτι τους συνεβει κατι για το οποιο θελουν να ενημερωσουν ολους οσους τους "παρακολουθουν" (στην περιπτωση σου την Α) καλουν την μεθοδο notifyObservers(Object).Αθτο θα εχει σαν αποτελεσμα να καλεστει η μεθοδος update(Object) ολων των observers (που αναγκαστηκα θα πρεπει να υλοποιησει η Α κλαση σου εφοσον θελει να κανει implement το interface Observer).Σε αυτη λοιπον τη μεθοδο update θα κανεις οτι θελεις η κλαση Α να κανει.

Note : αν σκεφτηκες να περνας το frame (A) αντικειμενο στον κατασκευαστη των Β και C ,που ειναι λαθος σχεδιασμος,τοτε η παραπανω λυση ειναι αυτη που ενδυκνειται.

Περισσοτερα εδω : http://www.exciton.cs.rice.edu/JavaReso ... rvable.htm

Θα μπορουσες να το κανεις και με events ελεγχοντας στο frame απο ποιον προηλθαν και αν ειναι 1)αυτα που θες και 2) απο τα components που θες τοτε να κανεις τη δουλεια που πρεπει.Αλλα και αυτη η λυση νομιζω ειναι ειναι χειροτερη απο την παραπανω.Η λυση των Observables ειναι απολυτα συμβατη με το Listeners μοντελο του swing.

Αν το παρεκανα με την αναλυση sorry :P:P

Posted: Mon Mar 20, 2006 10:33 am
by nocturna_gr
Tomahawk wrote: Αν το παρεκανα με την αναλυση sorry :P:P
Μια χαρα τα πες! Ευχαριστω. Δεν εχω δοκιμασει τη λυση, αλλα εχω κολλησει εδω και μερες και ο,τι νεο ειναι αποδεκτο. Προς το παρον κανω λιγο διαβασμα σχετικα με observers...

Posted: Fri Mar 24, 2006 5:07 pm
by Tomahawk
Ξεχασα να πω οτι οι απαραιτητες κλασεις ειναι στο πακετο java.util και λεγονται Observable (Publisher) και Observer (Subscriber).Η κλαση Observable γινεται extend απο το αντικειμενο που θελουν να παρακολουθουν οι ενδιαφερομενοι και το interface Observer γινεται implement απο τα αντικειμενα που θελουν να παρακολουθουν καποιον τυπου Observable.