java为什么这个表将所有条目都按字符串排序?
我的问题是,JTable需要我自己填充数据,并希望使用接口自动排序。然而,它被排序为字符串,所以10在2之后。我该怎么解决
public class GUI extends Frame implements ActionListener, WindowListener {
private static final long serialVersionUID = -693036000167528691L;
private Button run,findAll,sortByNumberOfStretchesFound, sortByLongestStretch;
private TextField selectionSizeStart, numberOfThreads, selectionSizeEnd, minimumStretchSize, sequence;
private JTable table;
private String[] columnNames = new String[]{"#","Label","Label-Length","#Stretches Found","Unique","Longest Stretch"};
private int sortBy = 3;
private Object[][] data;
public GUI(String defaultSequence, int defaultSelectionMinimumSize, int defaultNumberOfThreads) {
table = new JTable(new DefaultTableModel(columnNames,0));
table.setAutoCreateRowSorter(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane scrollbar = new JScrollPane(table);
setLayout(new FlowLayout());
setVisible(true);
}
# 1 楼答案
来自javadocs的^{} ;} 的实例,并从它的javadoc排序工作如下
setAutoCreateRowSorter
创建^{setComparator
方法为列指定了Comparator
,请使用它李>getColumnClass
返回的列类是String
,则使用Collator.getInstance()
返回的Comparator
李>Comparable
,请使用调用compareTo
方法的Comparator
李>TableStringConverter
,则使用它将值转换为String
,然后使用Collator.getInstance()
返回的Comparator
李>toString
的结果上使用Comparator
返回的Collator.getInstance()
李>因此,如果你想更改默认值(本例中为5),你需要
Comparator
TableStringConverter
以实现自定义toString
功能{或者^你可以用自定义的^来实现你自己的逻辑
编辑
从OP的评论来看,有一个混合数组
Integer
和String
没有明显的方法来比较
Integer
和String
,所以你需要决定一个规则,我假设规则是“字符串之前的数字”现在,将所有数据包装在一个类中,该类在
Object
上实现Comparable
,并在那里完成工作,或者实现一个Comparator<Object>
,将其设置在表上。在compare方法中,您需要使用instaceof
来计算您正在比较的内容,并对它们进行比较。该方法需要如下所示: