Как изменить выбор по умолчанию на JSpinner?

Столкнулся с проблемой JSpinner. Я использую формат времени в счетчике "hh:mm:ss,msmsms". Когда я иду, чтобы увеличить время с помощью мыши без какого-либо выбора в формате счетчика, это означает, что я не выбираю какую-либо часть времени, такую ​​​​как часы, минуты, секунды или миллисекунды - это всегда увеличивает часы как выбор по умолчанию для часов.

Я хочу дать этот выбор по умолчанию для второго средства, когда я собираюсь увеличить или уменьшить время с помощью мыши, это работает во второй части.

E.G.

01:05:08,102

После того, как вы нажмете на спиннер вверх, наступит время, указанное ниже.

01:05:09,102

Это код:

Start_time_jSpinner = new javax.swing.JSpinner();
Start_time_jSpinner.setModel(new SpinnerDateModel());
Start_time_jSpinner.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
Start_time_jSpinner.setEditor(new JSpinner.DateEditor(Start_time_jSpinner,   "HH:mm:ss,SSS"));

person Animesh Kumar Paul    schedule 08.06.2012    source источник


Ответы (1)


Несмотря на то, что выбрано поле «час», значение будет увеличиваться/уменьшаться на секунду при нажатии стрелки вверх/вниз.

import java.util.Date;
import javax.swing.*;

public class SecondIncrement {

    SecondIncrement() {
        JSpinner spinner = new JSpinner();
        SpinnerDateModel dateModel = new SpinnerDateModel(){
            @Override 
            public Object getNextValue() {
                Date date = this.getDate();
                long millis = date.getTime();
                return new Date(millis+1000);
            }

            @Override 
            public Object getPreviousValue() {
                Date date = this.getDate();
                long millis = date.getTime();
                return new Date(millis-1000);
            }
        };
        spinner.setModel(dateModel);
        spinner.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        spinner.setEditor(new JSpinner.DateEditor(spinner, "HH:mm:ss,SSS"));
        JOptionPane.showMessageDialog(null, spinner);
    }

    public static void main(String[] args) throws Exception {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new SecondIncrement();
            }
        });
    }
}
person Andrew Thompson    schedule 08.06.2012
comment
В качестве альтернативы вы можете сбросить calendarfield внутри getxxxxValue(): public Object getNextValue() { setCalendarField(Calendar.SECOND); return super.getNextValue(); } (к сожалению, поле перезаписывается пользовательским интерфейсом каждый раз, когда нажимается кнопка). - person Howard; 08.06.2012
comment
Я хочу изменить часы выбора по умолчанию на секунды, а также метку выбора также перевести часы на секунды в счетчике. Сначала, когда я ничего не выбираю, если я нажму на верхнее состояние счетчика, это изменит секунды. Но если я выберу часы, минуты, то счетчик изменит их. @Эндрю Томпсон - person Animesh Kumar Paul; 09.06.2012