Grazie per la risposta e mi scuso per non aver aperto un nuovo thread;
quindi non era una cosa poi così semplice! non ce l'avrei fatta con le mie conoscenze!!
Ecco come ho impostato il codice....
....ho messo il tuo codice nella Classe SpinnerOrario():
codice:
package utility;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
public class SpinnerOrario extends JSpinner {
/**
*
*/
private static final long serialVersionUID = 1L;
private class MySpinnerDateModel extends SpinnerDateModel {
/**
*
*/
private static final long serialVersionUID = 1L;
private Date earliestDate, endDate;
private int field;
GregorianCalendar cal = new GregorianCalendar();
GregorianCalendar tempCal = new GregorianCalendar();
public Object getNextValue() {
Date actualDate = this.getDate();
cal.setTime(actualDate);
tempCal.setTime(actualDate);
tempCal.add(field, 15);
if (!tempCal.getTime().after(endDate)) {
cal.add(field, 15);
}
return cal.getTime();
} // FINE METODO
public Object getPreviousValue() {
Date actualDate = this.getDate();
cal.setTime(actualDate);
tempCal.setTime(actualDate);
tempCal.add(field, -15);
if (!tempCal.getTime().before(earliestDate)) {
cal.add(field, -15);
}
return cal.getTime();
} // FINE METODO
public MySpinnerDateModel(Date startDate, Date earliestDate, Date endDate, int field) {
super(startDate, earliestDate, endDate, field);
this.earliestDate = earliestDate;
this.endDate = endDate;
this.field = field;
} // FINE COSTRUTTORE
} // FINE PRIVATE CLASS
public SpinnerOrario() {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(new Date(0));
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
Date earliestDate = calendar.getTime();
calendar.set(Calendar.HOUR_OF_DAY, 24);
calendar.set(Calendar.MINUTE, 0);
Date latestDate = calendar.getTime();
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 0);
Date startDate = calendar.getTime();
setModel(new MySpinnerDateModel(startDate, earliestDate, latestDate, Calendar.MINUTE));
setEditor(new JSpinner.DateEditor(this, "HH:mm"));
} // FINE COSTRUTTORE
} // FINE CLASSE
Così da creare i miei JSpinner per l'orario in altre Classi....
codice:
JSpinner orarioStart = new SpinnerOrario();
getFormat(orarioStart,4); // JSpinner, colonne
orarioStart.addChangeListener(new ActionSpinner());
Pensavo di inserire un parametro per variare in base alle esigenze lo step dell'orario,
o altri parametri per variare i valori min, max e iniziale,
comunque, come sempre, il codice funziona alla grande.
Devo studiarmi il puntatore super,
non ho capito bene gli usi.
PS: Eclipse mi ha "suggerito" di cancellare questa riga:
codice:
this.startDate = startDate;
Sempre gentilissimo, grazie