- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有下面的代码应该在 JSpinner 对象中显示时间
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.AM_PM, 0);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
spStartTime = new JSpinner(new CustomSpinnerModel(cal.getTime(), null, null, cal.get(Calendar.HOUR_OF_DAY), 100, "start"));
((JSpinner.DefaultEditor) spStartTime.getEditor()).getTextField().setFormatterFactory(new DefaultFormatterFactory(new DateFormatter(new SimpleDateFormat("hh:mm:ss,SSS"))));
CustomSpinnerModel 扩展了 SpinnerDateModel,我重写了 getNextValue() 和 getPreviousValue()。
public Object getNextValue()
{
Object next = super.getValue();
Calendar calendar = new GregorianCalendar();
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
calendar.setTime((Date) next);
Date helper = new Date(calendar.getTimeInMillis() + defaultStep);
calendar.setTime(helper);
System.out.println(calendar.getTimeInMillis());
return calendar.getTime();
}
现在,我第一次点击向上箭头时会打印 100 毫秒,这意味着该值是正确的,因为我从 0 毫秒开始。问题是我在 JSpinner 中看到的是
02:00:00,100
可视化中存在恒定的 2 小时偏移。
最佳答案
我认为DateFormat#setTimeZone(TimeZone)是您正在寻找的:
//((JSpinner.DefaultEditor) spStartTime.getEditor()).getTextField()
// .setFormatterFactory(new DefaultFormatterFactory(
// new DateFormatter(new SimpleDateFormat("hh:mm:ss,SSS"))));
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss,SSS");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
((JSpinner.DefaultEditor) spStartTime.getEditor()).getTextField()
.setFormatterFactory(new DefaultFormatterFactory(
new DateFormatter(format)));
import java.awt.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import javax.swing.text.*;
public class DateEditorTimeZoneTest {
public JComponent makeUI() {
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss,SSS");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
cal.clear(Calendar.HOUR_OF_DAY);
cal.clear(Calendar.AM_PM);
cal.clear(Calendar.HOUR);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
Date start = cal.getTime();
System.out.println(start);
System.out.println(format.format(start));
int defaultStep = 100;
JSpinner spinner = new JSpinner(new SpinnerDateModel(
start, null, null, Calendar.MILLISECOND) {
@Override public void setCalendarField(int calendarField) {
// If you only want one field to spin you can subclass
// and ignore the setCalendarField calls.
}
@Override public Object getNextValue() {
Object next = super.getValue();
Calendar calendar = new GregorianCalendar();
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
calendar.setTime((Date) next);
Date helper = new Date(calendar.getTimeInMillis() + defaultStep);
calendar.setTime(helper);
System.out.println(calendar.getTimeInMillis());
return calendar.getTime();
}
//@Override public Object getPreviousValue() {
// //...
//}
});
JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "HH:mm:ss,SSS");
spinner.setEditor(editor);
editor.getTextField().setFormatterFactory(
new DefaultFormatterFactory(new DateFormatter(format)));
JPanel p = new JPanel();
p.add(spinner);
return p;
}
public static void main(String... args) {
EventQueue.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new DateEditorTimeZoneTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
}
关于java - 尽管值正确,JSpinner 显示的时间仍具有恒定的小时偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247801/
我正在尝试让 JSpinner(包含分/秒计时器)为一群按自己的方式工作的人工作,他们不关心鼠标,但希望每次击键都能准确地完成他们的任务习惯了。它几乎按照我想要的方式工作,但最后一英里是最难的。 这在
我正在 netbeans 中构建一个小型应用程序,我使用 JSpinner 组件来设置产品的数量。如何将微调器设置为仅取正值?在 Netbeans 中是否有可以设置的选项或方法JSpinner ? 额
我正在使用 JAVA 开发 i18n 应用程序。 我正在使用 JSpinner与 String[]作为模型以允许用户选择某些选项。 我的问题是 JSpinner 中的文本正在因语言而变化。 所以我不想
Quick picture to show what is happening JSpinner 出现了两次,如上图所示。第一次出现在不应该出现的点 (0,0) 处的情况下,如果没有微调按钮,则无法选
我的问题是 JSpinner(在代码中名为 spinnerCantidadPuntas)有时根本不显示,或者只是有错误。当我运行项目(F6)时,它几乎肯定无法正确显示,当我调试它(CTRL+F5)
我可以使用 getValue() 获取当前值,但是是否可以获取 JSpinner 的最大和最小允许值?从文档中找不到 JSpinner 的 getMax() 或 getMin() 等方法。 http:
这个问题已经有答案了: How to set JSpinner as non editable? (3 个回答) 已关闭 9 年前。 如何制作一个不允许手动输入的 JSpinner。我希望我的微调器只
过去一个月我一直在开发 GUI,我发现 JSpinner 无法正确显示。只出现边框,没有数字,没有箭头,看图: 我可以判断某个组件何时启用或未启用,但这不是问题所在。 入门类,其中 MAIN 方法是:
我创建了以下类,它扩展了 JSpinner 以迭代 dd/mm/yyy 值。 public class DateSpinner extends JSpinner{ Calendar calen
当我的 JSpinner 为空时,我想采用 null 值。但当我调用 getValue() 函数时,它返回 0.0 。 public JFormattedTextField getTextFiel
我试图实现以下目标。 我想使用一个使用数字作为数据的 JSpinner,但我想让它像这样渲染:“6/10”,即“值/最大值”,其中默认的 JSpinner 只显示“值” 。当然,我使用 Spinner
我有一个带有 ChangeListener 定向的 JSpinner 。但只有当我按 Enter 或单击其中一个 JSpinner 按钮时,才会激活 ChangeListener 。我想知道如何在值更
我得到了步长为 0.01 的 JSpinner,但 getValue() 似乎返回奇数值。 举个例子:它是 0.06,如果我增加它,它有时会显示 0.069999999999999999 而不是 0.
我有一个 JSpinner,我创建它并将其添加到屏幕上,然后使用 setValue 更新它的值。如果我随后调用 getValue,则会返回正确的更新值。但它没有显示在 UI 上,当我单击按钮递增时,它
我有一个 JSpinner,其中所有整数都作为 model。我希望它的值随着向下箭头而增加,并且随着向上箭头而减少,这与默认用法完全相反。 我已经使用具有先前值的变量完成了此操作,并添加了一个 Cha
所以我的问题是,我之前在 Jspinners 上也遇到过这个问题。是我用标题边框包围我的 jspinner 吗?然而,在 GUI 中,它会剪切标题文本,因为 js 较小。那么,我如何强制 gui 根据
我有一个类,其中有两个 JSpinner 对象,x 和 y。我有一个更改监听器,它已添加到两者中。有人可以告诉我如何实现我的更改监听器,以便监听器可以区分两个对象之间的区别。例如伪代码: if(sou
我想同时允许“逗号”和“点”作为 double 分隔符。 我可以在字符串中使用 replace 方法来只获取一个分隔符,但问题是 double 值是 JSpinner 的值,我无法找到任何允许两个分隔
我有数组 JSpinners,但我无法监听。 这个不起作用,因为 Java 需要最终变量。当我将 spin4[j] 更改为 spin4[0] <- 它正在工作。但我需要带有 JSpinners 的数组
下面这段代码实际上做了什么, //Make the year be formatted without a thousands separator. spinner.setEdito
我是一名优秀的程序员,十分优秀!