gpt4 book ai didi

java - 覆盖 getColumnClass 不适用于日期列

转载 作者:行者123 更新时间:2023-12-02 03:44:15 25 4
gpt4 key购买 nike

我正在 Matlab 中使用 JIDE 网格排序和自动过滤功能。我已经重写了 getColumnClass,并且过滤和排序对于整数、 double 和字符串列效果很好(对数字进行数字排序,对字符串分别按词法排序)。

但是,我面临着日期列的重大问题。我已经重写了 getColumn 类并定义为 Date.class。但我认为我必须定义将日期(如原始数据)传递给过滤和排序的格式,以便它理解格式并正常工作。

我看到 JIDE 自动过滤中的默认日期格式是“07-Apr-2016”。我尝试将数据转换为相同的格式,但没有成功。如果我尝试过滤日期,它会抛出(未知来源)异常。我认为它不理解我的日期格式。重写日期列的类时如何定义日期格式?

    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
java.util.Date cannot be cast to java.lang.String
at java.lang.String.compareTo(Unknown Source)
at com.jidesoft.filter.LessThanFilter.isValueFiltered(Unknown Source)
at com.jidesoft.grid.FilterableTableModel.shouldBeFiltered(Unknown Source)

这是我的 TableModel 类,它重写了 DefaultTableModel。

import javax.swing.table.*;
import java.util.Date;

class MyTableModel extends DefaultTableModel {

public MyTableModel(Object rowData[][], Object columnNames[]) {
super(rowData, columnNames);
}
@Override
public Class getColumnClass(int col) {
switch (col){
case 0:
return Integer.class;
case 1: case 2: case 9:
case 10: case 33:
return String.class;
case 3:
return Date.class;
default:
return Double.class;
}
}
@Override
public boolean isCellEditable(int row, int col) {
switch (col){
case 28: case 29: case 30: case 31: case 32:
return true;
default:
return false;
}
}
}

最佳答案

我对 JIDE 一无所知,所以我的所有评论都是针对 JDK 中的常规类。

I see default date format in JIDE Autofiltering is '07-Apr-2016'.

对我来说这看起来像一个字符串。如果您希望列包含 Date,那么您需要在 TableModel 中存储 Date 对象,而不是日期的字符串表示形式.

然后,您通常会向表格添加自定义渲染器,以适当的格式显示日期。

例如:

public class YMDRenderer extends DefaultTableCellRenderer
{
private Format formatter = new SimpleDateFormat("yy/MM/dd");

public void setValue(Object value)
{
// Format the Object before setting its value in the renderer

try
{
if (value != null)
value = formatter.format(value);
}
catch(IllegalArgumentException e) {}

super.setValue(value);
}
}

您还可以查看Table Format Renderers其中包含可重用的渲染器,您只需向渲染器提供 Format 对象即可使用。这将使您无需为所需的每种数据格式创建独特的渲染器。

编辑:

I guess I have to use FormatConverter of some sort to do that

您可以使用 SimpleDateFormat 类和 parse(String) 方法将 String 解析为 Date 对象。

关于java - 覆盖 getColumnClass 不适用于日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488426/

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