我在Matlab中使用JIDE网格排序和自动过滤功能。我已经覆盖了getColumnClass,并且过滤和排序适用于整数,双精度和字符串列(数字排序数字,词汇排序分别为字符串)。
但是,我遇到了Date列的主要问题。我重写了getColumn类并定义为Date.class。但我认为我必须定义日期(如原始数据中)传递给Filtering and Sorting的格式,以便了解格式并正常工作。
我在JIDE Autofiltering中看到默认日期格式为'07 -Apr-2016'。我试过将我的数据转换为相同的格式,但没有运气。如果我尝试过滤日期,则会抛出(未知来源)异常。我认为它不了解我的日期格式。在覆盖Date列的类时,如何定义日期格式?
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;
}
}
}
答案 0 :(得分:2)
我对JIDE一无所知所以我的所有评论都是针对JDK中的常规课程。
我在JIDE Autofiltering中看到默认日期格式为'07 -Apr-2016'。
对我来说,这看起来像一个字符串。如果您希望列包含import argparse
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--test", type=int, dest='test', default=1)
print parser.parse_args().test
,则需要在Date
中存储Date
对象,而不是日期的字符串表示。
然后,您通常会在表格中添加自定义渲染器,以适当的格式显示日期。
例如:
TableModel
您还可以查看包含可重复使用的渲染器的Table Format Renderers,只需向渲染器提供Format对象即可使用。这将节省您为所需的每种数据格式创建独特的渲染器。
编辑:
我想我必须使用某种FormatConverter来做到这一点
您可以使用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);
}
}
类和parse(String)方法将String解析为Date对象。
答案 1 :(得分:0)
异常说:java.util.Date不能强制转换为java.lang.String。这意味着,就像Camickr指出的那样,Dates实际上是作为字符串存储在我的TableModel而不是Date对象中。我使用SimpleDateFormat类将Strings转换为Date对象。为了其他新手java学习者的利益,下面是执行此操作的代码片段。
$ echo "DW_Prod\\Facets\\UNRCH_MBRS: UNRCH_Members.sql" |
sed 's#[[:space:]].*##'
DW_Prod\Facets\UNRCH_MBRS:
可以使用与上面提到的Camickr相同的类(SimpleDateFormat)来控制uitable中日期数据的显示。
我后来发现的另一个解释和解决相同问题的帖子:HERE