首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSpinner时间约束

JSpinner时间约束
EN

Stack Overflow用户
提问于 2015-04-08 23:45:33
回答 2查看 276关注 0票数 1

我正在尝试创建一个有小时和分钟的旋转器。分钟部分只需要增加10分钟,时间范围必须从当前时间到结束时间。我还需要最小值(以前的当前时间)来更新为当前时间。

我试着摆弄它,但我就是不能让它工作。

代码语言:javascript
复制
JSpinner spinner1 = new javax.swing.JSpinner();
    SpinnerDateModel spinnermodel = new SpinnerDateModel();
    spinnermodel.setCalendarField(Calendar.MINUTE);
    spinner1.setModel(spinnermodel);
    spinner1.setEditor(new JSpinner.DateEditor(spinner1, "hh:mm"));

SpinnerModel model = new SpinnerDateModel(currentDate, currentDate, latestDate, Calendar.MINUTE * 10 ?);
EN

回答 2

Stack Overflow用户

发布于 2015-04-09 00:50:47

SpinnerDateModel只是使用1来递增您想要更改的字段。

我扩展了SpinnerDateModel,为模型添加了一个加法属性,以控制增量值,而不是硬编码为1:

代码语言:javascript
复制
import java.util.*;
import javax.swing.*;

public class MySpinnerDateModel extends SpinnerDateModel
{
    private int increment = 1;

    public MySpinnerDateModel(Date value, Comparable start, Comparable end, int calendarField)
    {
        super(value, start, end, calendarField);
    }

    public MySpinnerDateModel()
    {
        this(new Date(), null, null, Calendar.DAY_OF_MONTH);
    }

    public void setIncrement(int increment)
    {
        this.increment = increment;
    }

    public int getIncrement()
    {
        return increment;
    }

    @Override
    public Object getNextValue()
    {
        Calendar cal = Calendar.getInstance();
        Date value = (Date)getValue();
        cal.setTime(value);
        cal.add(getCalendarField(), increment);
        Date next = cal.getTime();
        Comparable end = getEnd();

        return ((end == null) || (end.compareTo(next) >= 0)) ? next : null;
    }

    @Override
    public Object getPreviousValue()
    {
        Calendar cal = Calendar.getInstance();
        Date value = (Date)getValue();
        cal.setTime(value);
        cal.add(getCalendarField(), -increment);
        Date prev = cal.getTime();
        Comparable start = getStart();

        return ((start == null) || (start.compareTo(prev) <= 0)) ? prev : null;
    }
}

您应该能够像以前一样使用模型,但需要添加一条语句:

代码语言:javascript
复制
MySpinnerDateModel model = new MySpinnerDateModel(currentDate, currentDate, latestDate, Calendar.MINUTE); 
model.setIncrement( 10 );
票数 3
EN

Stack Overflow用户

发布于 2015-04-09 00:52:10

您可以扩展SpinnerDateModel以指定行为。以下是覆盖getNextValue和getPreviousValue以返回值+/- 10分钟的示例:

代码语言:javascript
复制
    Date now = new Date();
    Date start = now;
    final long tenMinutesInMillis = 1000 * 60 * 10;
    Date end = new Date(now.getTime() + tenMinutesInMillis * 60);
    SpinnerModel model = new SpinnerDateModel(now, start, end, Calendar.MINUTE){
        @Override
        public Object getNextValue(){
            Date newDate = new Date(getDate().getTime() + tenMinutesInMillis);
            Date endDate = (Date)getEnd();
            return newDate.getTime() > endDate.getTime() ? endDate : newDate;
        }

        @Override
        public Object getPreviousValue(){
            Date newDate = new Date(getDate().getTime() - tenMinutesInMillis);
            Date startDate = (Date)getStart();
            return newDate.getTime() < startDate.getTime() ? startDate : newDate;
        }
    };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29519329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档