Wazka έγραψε:
Καλά, από παραδοχές άλλο τίποτα! Κι εγώ γενικά έχω κάνει πολλές. Το θέμα είναι ότι και πάλι, δεν μπορώ να το καταφέρω να κάνει έστω κάτι... Σου παραθέτω τον κώδικά μου στο κομμάτι που αφορά το DateModel μήπως και δεις κάτι που εγώ δε βλέπω. Αλλιώς δεν ξέρω τι να κάνω, έχω απελπιστεί...
Και στις 2 παραδοχές δεν λες τι είναι το date. Long, String, Date?
Πάντως το exception που σου πετάει είναι επειδή πριν κατασκευάσεις τον timeSpinner (είσαι ακόμα την ώρα που το ορίζεις το χρησιμοποιείς για να ορίσεις το DateEditor. Όμως εκείνη τη στιγμή το timeSpinner είναι ακόμα null. Άρα λογικά παίρνεις nullPointerException.
Έτσι σου παραθέτω με μικρές αλλαγές τον κώδικά σου καθώς και ένα άλλο παράδειγμα που πιστεύω είναι λίγο καλύτερο. Πάντως όπως και να έχει επειδή το spinner χειρίζεται πλέον date θα πρέπει να παίρνεις date και μετά είτε να ορίσεις τον χρόνο σου στο widget ως long (date δεν το χειρίζεται το δοκίμασα) είτε να μετατρέψεις το date σε string, να πάρεις το νούμερο της ώρας και των λεπτών και να τα κάνεις integers και να τα βάλεις στις αντίστοιχες μεταβλητές.
Κώδικας:
add(timeSpinner = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.HOUR_OF_DAY)) {{
setFont(getFont().deriveFont(fontSize));
addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent evt) {
long time = ((Date) timeSpinner.getValue()).getTime();
System.out.println(time);
inputWidget.updateData("currTime", time);
}
});
}});
JFormattedTextField tf = ((JSpinner.DefaultEditor) timeSpinner.getEditor()).getTextField();
DateFormat formatter = new SimpleDateFormat("HH:mm");
tf.setForeground(Color.black);
Κώδικας:
add(timeSpinner = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.HOUR_OF_DAY)) {{
setFont(getFont().deriveFont(fontSize));
addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent evt) {
long time = ((Date) timeSpinner.getValue()).getTime();
DateFormat formatter = new SimpleDateFormat("HH:mm");
String timeInString = formatter.format(time);
System.out.println(timeInString);
System.out.println("hours:" + Integer.parseInt(timeInString.substring(0,2)));
System.out.println("minutes:" + Integer.parseInt(timeInString.substring(3,5)));
inputWidget.updateData("time", time);
}
});
}});
String format = "hh:mm";
final JSpinner.DateEditor editor = new JSpinner.DateEditor(timeSpinner, format);
timeSpinner.setEditor(editor);
final JFormattedTextField tf = editor.getTextField();
tf.setForeground(Color.black);
Κώδικας:
add(timeSpinner = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.HOUR_OF_DAY)){
{
addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent evt) {
long time = ((Date)timeSpinner.getValue()).getTime();
inputWidget.updateData("currTime", time);
System.out.println("time: " + new SimpleDateFormat("HH:mm").format(time));
}
});
setEditor(new JSpinner.DateEditor(this, "HH:mm"));
}
});
long time = ((Date)timeSpinner.getValue()).getTime();//in order to initialize widget
inputWidget.updateData("currTime", time);//in order to initialize widget
Λογικά και τα 3 λειτουργούν σωστά.