类: javax.swing.JSpinner
区间内数值的微调
JSpinner spinRecordSensitivity = new JSpinner();
//设置数值微调器,初始值为0,取值范围为0-32767,递增或递减值为1.
spinRecordSensitivity.setModel(new SpinnerNumberModel(0, 0, 32767, 1));
//禁止输入非法字符
JFormattedTextField tf = ((JSpinner.NumberEditor) spinRecordSensitivity.getEditor()).getTextField();
DefaultFormatterFactory factory = (DefaultFormatterFactory) tf.getFormatterFactory();
NumberFormatter formatter = (NumberFormatter) factory.getDefaultFormatter();
formatter.setAllowsInvalid(false);
2. 时间戳的微调
实现效果:将光标放到 年、月、日、时、分、秒部分, 点击微调按钮,可以对该部分进行调节。
代码:
//初始化
JSpinner spinStart = new JSpinner();
spinStart.setModel(new javax.swing.SpinnerDateModel());
//设置时间戳格式
JSpinner.DateEditor startEditor = new JSpinner.DateEditor(spinStart, "yyyy-MM-dd HH:mm:ss");
spinStart.setEditor(startEditor);
//禁止输入无效字符
JFormattedTextField tf = ((JSpinner.DateEditor) spinStart.getEditor()).getTextField();
DefaultFormatterFactory factory = (DefaultFormatterFactory) tf.getFormatterFactory();
DateFormatter formatter = (DateFormatter) factory.getDefaultFormatter();
formatter.setAllowsInvalid(false);
//获取指定格式的字符戳值
DateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd");
String start = dateFormate.format(spinStart.getValue());
3. 期限内单个日期值的微调
JSpinner spinMonth = new javax.swing.JSpinner();
JSpinner spinYear = new javax.swing.JSpinner();
JSpinner spinDay = new javax.swing.JSpinner();
JSpinner spinHour = new javax.swing.JSpinner();
JSpinner spinMinute = new javax.swing.JSpinner();
spinSecond = new javax.swing.JSpinner();
Calendar c = Calendar.getInstance();
int currentYear = c.get(Calendar.YEAR);
int currentMonth = c.get(Calendar.MONTH) + 1;
int currentDay = c.get(Calendar.DAY_OF_MONTH);
int currentHour = c.get(Calendar.HOUR_OF_DAY);
int currentMinute = c.get(Calendar.MINUTE);
int currentSecond = c.get(Calendar.SECOND);
spinYear.setModel(new SpinnerNumberModel(currentYear, 2015, 2100, 1));
spinMonth.setModel(new SpinnerNumberModel(currentMonth, 1, 12, 1));
spinDay.setModel(new SpinnerNumberModel(currentDay, 1, c.getActualMaximum(Calendar.DAY_OF_MONTH), 1));
spinHour.setModel(new SpinnerNumberModel(currentHour, 0, 23, 1));
spinMinute.setModel( new SpinnerNumberModel(currentMinute, 0, 59, 1));
spinSecond.setModel( new SpinnerNumberModel(currentSecond, 0, 59, 1));
ChangeListener startTimeChangeListener = new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
startTimeStateChanged(e);
}
};
spinYear.addChangeListener(startTimeChangeListener);
spinMonth.addChangeListener(startTimeChangeListener);
//以上涉及了该方法,该方法,主要针对年份和月份变化后,月内的日的取值范围的修改。
private void startTimeStateChanged(ChangeEvent e)
{
Calendar cc = Calendar.getInstance();
String newDate = spinYear.getValue().toString() + "-"
+ spinMonth.getValue().toString() + "-"
+ spinDay.getValue().toString();
java.sql.Date d = java.sql.Date.valueOf(newDate);
cc.setTime(d);
int lastDay = cc.getActualMaximum(Calendar.DAY_OF_MONTH);
spinDay.setModel(new SpinnerNumberModel(1, 1, lastDay, 1));
}