Как получить дату от моего JSpinner?

Это код Spinner

Hini = new javax.swing.JSpinner();
Date date = new Date();
SpinnerDateModel sm = new SpinnerDateModel(date, null, null, Calendar.MINUTE);
JSpinner Hini = new JSpinner(sm);
JSpinner.DateEditor de = new JSpinner.DateEditor(Hini, "hh:mm a");
de.getTextField().setEditable( true );
Hini.setEditor(de);

И вот как я хочу получить значения, но всегда показывает "00:00"

    `SimpleDateFormat formater = new SimpleDateFormat("HH/mm");
     String spinnerValue = formater.format(Hini.getValue());
     System.out.println(spinnerValue);`

Я тоже пробовал это, но всегда показывало реальное время, а не выбранное

Hini = new JSpinner(sm);
de = new JSpinner.DateEditor(Hini, "hh:mm a");
de.getTextField().setEditable( false );
Hini.setEditor(de);
System.out.println("Spinner:      "+de.getFormat().format(Hini.getValue()));

1 ответ

Решение

Вы, кажется, создаете два экземпляра JSpinner

// Instance(?) field here...
Hini = new javax.swing.JSpinner();
Date date = new Date();
SpinnerDateModel sm = new SpinnerDateModel(date, null, null, Calendar.MINUTE);
// Local field here
JSpinner Hini = new JSpinner(sm);
JSpinner.DateEditor de = new JSpinner.DateEditor(Hini, "hh:mm a");
de.getTextField().setEditable( true );
Hini.setEditor(de);

Поэтому я могу только догадываться, что локальное поле - это то, что добавляется в пользовательский интерфейс, а поле экземпляра игнорируется, а это означает, что то, что пользователь вводит в поле, не было установлено в поле экземпляра.

Отбросьте создание второго поля и замените его Hini.setModel(sm);

Вместо форматирования значения непосредственно из JSpinner, вы должны просто получить ссылку на Date Значение и формат только тогда, когда вам действительно нужно. Это дает вам более гибкое решение

Другие вопросы по тегам