gpt4 book ai didi

java - JXDatePicker 中的动态 JFormattedTextFields

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:13 25 4
gpt4 key购买 nike

我需要一个接受 4 种格式的字段:整数浮点字符串日期。当用户需要输入日期时,UI 将显示一个日期选择器。

因此,为了简化 UI 以拥有单个文本字段,我创建了一个 JXDatePicker,其中 JFormattedTextfield 作为编辑器,并动态分配 JFormattedTextfield 的格式化工厂来处理 IntegerFloatStringDate 输入。以下是实现的代码片段:

  public void setFormat(String format)
{
// requires integer format
if (IntegerAttribute.TYPE_NAME.equals(format)) {
setBoundFormatFactory(new DefaultFormatterFactory(new NumberFormatter(NumberFormat.getInstance())));
}
// requires float format
else if (FloatAttribute.TYPE_NAME.equals(format)) {
setBoundFormatFactory(new DefaultFormatterFactory(new NumberFormatter(new DecimalFormat(FLOAT_FORMAT))));
}
else if (DateAttribute.TYPE_NAME.equals(format)
|| DateTimeAttribute.TYPE_NAME.equals(format)
|| TimeAttribute.TYPE_NAME.equals(format)) {
// requires date format
setDateFormat(model.getDateFormat());
}
else {
// otherwise set to us string
setBoundFormatFactory(new DefaultFormatterFactory());
}
}

public void setDateFormat(String dateFormat)
{
setBoundFormatFactory(new DefaultFormatterFactory(new DateFormatter(new SimpleDateFormat(dateFormat))));
}

private void setBoundFormatFactory(DefaultFormatterFactory factory)
{
m_formattedTextfield.setFormatterFactory(factory);
}

该实现适用于字符串和日期格式,但是对于整数和 float ,JXDatePicker 似乎试图将其转换为日期数据类型,因此会导致类转换异常:

java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.Date
at org.jdesktop.swingx.plaf.basic.BasicDatePickerUI$Handler.editorPropertyChange(BasicDatePickerUI.java:1359)
at org.jdesktop.swingx.plaf.basic.BasicDatePickerUI$Handler.propertyChange(BasicDatePickerUI.java:1336)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:339)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:276)
at java.awt.Component.firePropertyChange(Component.java:8163)
at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:782)
at javax.swing.JFormattedTextField.commitEdit(JFormattedTextField.java:513)

当字段为数字格式时,是否有办法阻止日期选择器尝试将值转换为日期?或者还有其他解决办法吗?

最佳答案

  • 从未使用过JXDatePicker(我认为仅支持通过DateFormat或SimpleDateFormat格式化日期值,必须同步两个格式化程序),

  • 您可以将 JSpinnerSpinnerDateModel 一起使用,而不是 JFormattedTextField

  • 也许看看JCalendar by Kai Toedter ,并使用代码源

关于java - JXDatePicker 中的动态 JFormattedTextFields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12672606/

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