taghor έγραψε:
Εγώ χειρίστικα το time με ένα και μόνο JSpinner που έπαιρνε Date οπότε δεν είχα 2 μεταβλητές παρά μόνο μία. Η μετατροπή σε μεταβλητή τύπου long ενός date σε java είναι πολύ εύκολη αφού και η Java στην ουσία χειρίζεται τα Dates σαν longs.
Αυτή είναι μια προσέγγιση που είχα σκεφτεί κι εγώ, αλλά την απέρριψα, γιατί μου φάνηκε ευκολότερο με τον άλλο τρόπο (κυρίως επειδή ήταν ψιλοέτοιμος ο κώδικας από το παράδειγμα του HelloRoom
). Μπορεί να το δοκιμάσω τελικά -αν προλάβω!
taghor έγραψε:
Καταρχήν νομίζω ότι το <Attribute name = "time" type = "int">(hour * 60) + minute </Attribute> μέσα στο input widget δεν κάνει τίποτα. Στο input widget, όπως και στο output απλά ορίζεις το όνομα και τον τύπο των attributes. Δεν μπορείς να βάλεις και να τα υπολογίζει. Αυτό το κάνεις είτε στον enactor (μέσω κανόνων) είτε με κώδικα.
Έκανα αυτή τη σκέψη (και υλοποίηση κατ'επέκταση, βασισμένη στην απάντηση που είχε παραθέσει στο επίσημο φόρουμ ο Παναγιώτης που έλεγε:
Παράθεση:
but I believe if you create an attribute, say, timeDifference, in the InWidget that is updated with the value of setTime-curTime. Then create queries which about that attribute.
Βέβαια, φαντάζομαι ότι αυτό αναφέρεται στην προσέγγιση των widgets με κλάσεις, αλλά ήλπιζα να μπορέσει να λειτουργήσει και στην προσέγγιση με xml.
taghor έγραψε:
στον ChangeListener και των 2 JSpinners που έχεις θα παίρνεις τις τιμές και των δύο τιμών προγραμματιστικά (hour και minute) και θα κάνεις update την τιμή του time.
Για να το πετύχεις αυτό μπορείς να κάνεις μέσα στον κώδικα του changelistener του hour και του minute:
int hour = inputWidget.getNonConstantAttributeValue("hour");
int minute = inputWidget.getNonConstantAttributeValue("minute");
int time = 60* hour + minute;
inputWidget.updateData("time", time);
Δοκίμασα να προσθέσω περίπου τον παραπάνω κώδικα σε κάθε listener, αλλά δυστυχώς δεν κάνει τίποτα απολύτως... Συγκεκριμένα άφησα το προηγούμενο κομμάτι ως είχε και πρόσθεσα τα "extras" που χρειαζόταν ο κάθε listener. Πχ, στον JSPinner του hour πρόσθεσα το int minute = inputWidget.getNonConstantAttributeValue("minute"); και τούμπαλιν αλλά δυστυχώς δεν...
Δεν ξέρω τι άλλο να δοκιμάσω. Τελευταία μου εναλλακτική μάλλον είναι να ακολουθήσω την προσέγγιση με Date στον JSPinner, αν και πολύ φοβάμαι ότι θα μου πάρει κάμποση ώρα να γράψω σωστά τον κώδικα και πάλι δε θα καταφέρω και πολλά...
Όπως και να'χει, σ'ευχαριστώ πολύ και πάλι taghor! Θα επανέλθω με νεότερα...