ich hab ein SpinnerModel geschrieben für wochen, also da steht dann z.b. "31.05.2005 - 05.06.2005" und mit den buttons soll man eine woche früher und später umschalten können, aber das funktioniert nicht. der startwert wird angezeigt aber wenn ich auf ein button klicke passiert nichts. wieso?
hier das model:
EDIT:
hab den fehler gefunden. es lag daran das ich die ChangeListener nicht irgendwo gespeichert habe und die benachrichtigt habe wenn setValue() aufgerufen wird.
hier das model:
Code:
package school.gui;
import java.util.Calendar;
import javax.swing.*;
import javax.swing.event.ChangeListener;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public class WeekSpinnerModel implements SpinnerModel{
private Calendar week;
private SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
public WeekSpinnerModel(Calendar week) {
this.week = week;
}
public Object getValue() {
System.out.println("get");
StringBuffer sb = new StringBuffer();
Calendar cal = (Calendar) week.clone();
week.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
sb.append(format.format(cal.getTime()));
sb.append(" - ");
cal.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
sb.append(format.format(cal.getTime()));
return sb.toString();
}
public void setValue(Object value) {
if(value instanceof String) {
String strDate = ((String) value).substring(0,10);
try {
this.week.setTime(format.parse(strDate));
}catch(ParseException e) {
e.printStackTrace();
}
}
}
public Object getNextValue() {
StringBuffer sb = new StringBuffer();
Calendar cal = (Calendar) week.clone();
cal.roll(Calendar.WEEK_OF_YEAR,true);
cal.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
sb.append(format.format(cal.getTime()));
sb.append(" - ");
cal.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
sb.append(format.format(cal.getTime()));
return sb.toString();
}
public Object getPreviousValue() {
StringBuffer sb = new StringBuffer();
Calendar cal = (Calendar) week.clone();
cal.roll(Calendar.WEEK_OF_YEAR,false);
cal.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
sb.append(format.format(cal.getTime()));
sb.append(" - ");
cal.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
sb.append(format.format(cal.getTime()));
return sb.toString();
}
public void addChangeListener(ChangeListener l) {
}
public void removeChangeListener(ChangeListener l) {
}
}
EDIT:
hab den fehler gefunden. es lag daran das ich die ChangeListener nicht irgendwo gespeichert habe und die benachrichtigt habe wenn setValue() aufgerufen wird.
Code:
package school.gui;
import java.util.Calendar;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.*;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public class WeekSpinnerModel implements SpinnerModel{
private Vector<ChangeListener> listeners;
private Calendar week;
private SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
public WeekSpinnerModel(Calendar week) {
this.listeners = new Vector<ChangeListener>();
this.week = week;
}
public Object getValue() {
System.out.println("get");
StringBuffer sb = new StringBuffer();
Calendar cal = (Calendar) week.clone();
week.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
sb.append(format.format(cal.getTime()));
sb.append(" - ");
cal.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
sb.append(format.format(cal.getTime()));
return sb.toString();
}
public void setValue(Object value) {
if(value instanceof String) {
String strDate = ((String) value).substring(0,10);
try {
this.week.setTime(format.parse(strDate));
this.fireChangeEvent();
}catch(ParseException e) {
e.printStackTrace();
}
}
}
private void fireChangeEvent() {
for(ChangeListener l : this.listeners) {
l.stateChanged(new ChangeEvent(this));
}
}
public Object getNextValue() {
StringBuffer sb = new StringBuffer();
Calendar cal = (Calendar) week.clone();
cal.roll(Calendar.WEEK_OF_YEAR,true);
cal.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
sb.append(format.format(cal.getTime()));
sb.append(" - ");
cal.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
sb.append(format.format(cal.getTime()));
return sb.toString();
}
public Object getPreviousValue() {
StringBuffer sb = new StringBuffer();
Calendar cal = (Calendar) week.clone();
cal.roll(Calendar.WEEK_OF_YEAR,false);
cal.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
sb.append(format.format(cal.getTime()));
sb.append(" - ");
cal.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
sb.append(format.format(cal.getTime()));
return sb.toString();
}
public void addChangeListener(ChangeListener l) {
this.listeners.add(l);
}
public void removeChangeListener(ChangeListener l) {
this.listeners.remove(l);
}
}