gpt4 book ai didi

java - jSpinner 时间选择器模型编辑

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:26 25 4
gpt4 key购买 nike

我使用 jSpinner 进行时间选择。问题 1: 用户可以编辑时分和秒分隔符“:”,并且可以写入额外的数字,如“123”问题 2: 模型始终获取当前时间。我想要“00:00:00”当我用代码代替“hh:mm:ss”时,用户无法编辑这些值。

我的代码是;

spinner1 = new javax.swing.JSpinner();
SpinnerDateModel spinnermodel = new SpinnerDateModel();
spinnermodel.setCalendarField(Calendar.MINUTE);
spinner1 .setModel(spinnermodel);
spinner1 .setEditor(new JSpinner.DateEditor(spinner1 , "hh:mm:ss"));

感谢任何帮助。谢谢。

最佳答案

Problem 1: User can edited hour minutes and second seperator ":" and can write extra digits like "123"

您可以使用编辑器的格式化程序通过 getTextField() 来完成此操作方法:

JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "HH:mm:ss");
DateFormatter formatter = (DateFormatter)editor.getTextField().getFormatter();
formatter.setAllowsInvalid(false); // this makes what you want
formatter.setOverwriteMode(true);

文本字段实际上是一个 JFormattedTextFieldDateFormatter作为格式化程序。看看How to Use Formatted Text Fields以便更好地了解如何使用此组件。

注意创建编辑器时使用的模式。由于您的第二个要求,它是“HH:mm:ss”。

Problem 2: model get always current time. I want "00:00:00"

您需要在中午 12 点(24 小时)向微调器提供初始日期,该日期将翻译为“00:00:00”:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 24);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

SpinnerDateModel model = new SpinnerDateModel();
model.setValue(calendar.getTime());

JSpinner spinner = new JSpinner(model);

例子

这里有一个非常简单的例子来验证我所说的。希望对您有所帮助。

import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SwingUtilities;
import javax.swing.text.DateFormatter;

public class Demo {

private void createAndShowGUI() {

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 24); // 24 == 12 PM == 00:00:00
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

SpinnerDateModel model = new SpinnerDateModel();
model.setValue(calendar.getTime());

JSpinner spinner = new JSpinner(model);

JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "HH:mm:ss");
DateFormatter formatter = (DateFormatter)editor.getTextField().getFormatter();
formatter.setAllowsInvalid(false); // this makes what you want
formatter.setOverwriteMode(true);

spinner.setEditor(editor);

JPanel content = new JPanel();
content.add(spinner);

JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(content);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().createAndShowGUI();
}
});
}
}

编辑

When user try manually write hours or minutes (not using arrows) some logical problem ocures i think. Example i write 12 but spinner shows 21.

首先抱歉我之前没有注意到这一点。发生这种令人毛骨悚然的行为是因为格式化程序的覆盖模式属性在 JSpinner.DateEditor 初始化期间的某处设置为 false(但找不到位置)。根据 javadoc,此属性默认为 true .要解决这个问题,您只需添加这一行(我还在上面编辑了我的代码):

formatter.setOverwriteMode(true);

关于java - jSpinner 时间选择器模型编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com