Время JTextField в ЧЧ:мм:сс

У меня есть расчетное время, которое потребуется для конкретной задачи в минутах в поплавке. Как я могу поместить это в JFormattedTextField в формате HH:mm:ss?


person davidahines    schedule 06.05.2011    source источник
comment
Что вы пробовали? Вы читали учебник? download.oracle.com/javase/tutorial/uiswing/components/   -  person jzd    schedule 06.05.2011
comment
Похоже, эта задача лучше подходит для JProgressBar.   -  person Andrew Thompson    schedule 06.05.2011


Ответы (2)


JFormattedTextField принимает объект Format — таким образом, вы можете передать DateFormat, полученный вызовом DateFormat#getTimeInstance(). Вы также можете использовать SimpleDateFormat с HH:mm:ss в качестве строки формата.

См. также: http://download.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html#format


Если вы не ограничены использованием JFormattedTextField, вы также можете рассмотреть возможность собственного форматирования с помощью TimeUnit, доступный начиная с Java 1.5, как показано в этом ответе: Как преобразовать миллисекунды в X минут, x секунд в Java?

person no.good.at.coding    schedule 06.05.2011
comment
@dah У вас есть база Date, с которой вы можете работать, т.е. есть ли у вас время от, которое потребуется, скажем, 5 минут, чтобы завершить задачу? - person no.good.at.coding; 06.05.2011
comment
Неа. это только записано в десятичных минутах. - person davidahines; 06.05.2011
comment
Я думаю, что просто собираюсь преобразовать минуты в секунды в миллисекунды, а затем использовать это в конструкторе даты и использовать ваш метод. - person davidahines; 06.05.2011
comment
@dah Я не думаю, что это сработает, вам все равно понадобится базовый объект Date для работы - всего миллисекунды от значения, например 5 минут, дадут вам только время относительно начала эпохи (1 января 1970 г., 00:00:00 по Гринвичу). См. мой отредактированный ответ о том, как вы можете легко отформатировать его так, как хотите, с помощью класса TimeUnit. - person no.good.at.coding; 06.05.2011
comment
Разве 5 минут от эпохи не равно пяти минутам от х. - person davidahines; 06.05.2011
comment
@да, да. Но это может не дать вам ожидаемого результата. Попробуйте этот код: System.out.println(new Date(0)); System.out.println(new Date(5 * 60 * 1000)); Один из вариантов, который может вам подойти, — это использование TimeUnit и указанной статьи для реализации вашего собственного класса Format (просто расширьте java.text.Format и реализуйте абстрактные методы). Таким образом, вы получаете лучшее из обоих миров. - person Anthony Accioly; 06.05.2011

Для поплавка ‹ 1440 можно обойтись Calendar и DateFormat.

float minutes = 100.5f; // 1:40:30

Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.add(Calendar.MINUTE, (int) minutes);
c.add(Calendar.SECOND, (int) ((minutes % (int) minutes) * 60));
final Date date = c.getTime();

Format timeFormat = new SimpleDateFormat("HH:mm:ss");
JFormattedTextField input = new JFormattedTextField(timeFormat);
input.setValue(date);

Но имейте в виду, что если ваше число с плавающей запятой больше или равно 1440 (24 часа), метод Calendar просто перенесет день вперед, и вы не получите ожидаемых результатов.

person Anthony Accioly    schedule 06.05.2011