当前位置: 首页 > 知识库问答 >
问题:

为什么这个表将所有条目排序为字符串?

胡致远
2023-03-14
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个答案

屠瑞
2023-03-14

从javadocs forjtablesetautocreaterowsorter创建tablerowsorter的实例,并从它的javadoc进行排序,如下所示

  1. 如果setcomparator方法为列指定了comparator比较器,请使用它。
  2. 如果getColumnClass返回的列类是String,则使用collator.getInstance()返回的comparator
  3. 如果column类实现可比,请使用调用compareto方法的比较器
  4. 如果指定了TableStringConverter,请使用它将值转换为String,然后使用collator.getInstance()返回的comparator
  5. 否则,使用collator.getinstance()返回的comparator对对象调用tostring的结果。

因此,如果您想要更改默认值(在本例中为5),您需要

  1. 设置比较器
  2. implemenet数据对象中的可比
  3. 设置TableStringConverter以实现自定义ToString功能

或者,您可以跳过所有这些,使用自己的自定义排序逻辑实现自定义rowsorter

编辑

class MyClass implements Comparator<Object> {

    public int compare(Object o1, Object o2) {
        if (o1 == null && o2 == null) {
            return 0;
        }
        if (o1 == null) {
            return 1;
        }
        if (o2 == null) {
            return -1;
        }
        if (o1 instanceof Integer && o2 instanceof String) {
            return 1;
        }
        if (o1 instanceof String && o2 instanceof Integer) {
            return -1;
        }
        if (o1 instanceof Integer && o2 instanceof Integer) {
            return ((Integer) o1).compareTo((Integer) o2);
        }
        return o1.toString().compareTo(o2.toString());
    }
}
 类似资料:
  • 我从课本上抄了一个例子,但它拒绝编译。我是不是在什么地方打错了?出于某种原因,在客户端代码中,collections.sort(words)不允许程序编译。任何帮助都很感激。代码复制自Stuart Reges和Marty Stepp的“构建Java程序”第二版。我正试图通过复制来理解它。 该程序应该将一个CalendarDate对象装入一个ArrayList中。通过实现CalendarDate的可

  • 问题内容: Oracle Java Community网站上的一篇文章提供了以下方法作为示例(对于JPA Converter,但这并不相关): 将String y强制转换为String val有什么用?有正当的理由吗? 原始文章:JPA的新增功能 问题答案: 这样的转换是完全没有必要的。我可以想象那是以前 但是后来参数类型更改为,而作者只是忘了删除强制类型转换。

  • 问题内容: 我不明白为什么整数在串联中被视为字符串文字。例如 输出为:。 为什么不添加,为什么要添加? 问题答案: 该表达式从左到右求值。前两个操作数均为(10和30),因此第一个执行加法。 下一个获取操作数(40)和操作数(“ Sachin”),因此将其转换为并执行连接。 接下来的运算符获取一个操作数和一个操作数,并执行级联。 如果您想要不同的评估顺序,请使用括号: 这将输出。

  • 我有一些奇怪的行为,我正努力向自己解释。浮点字段,称为“文本缩放”,变为零。 如果某些代码正在更改值,则可以解释这一点。然而,我希望通过将其设置为“私有最终浮点”,能够导致构建失败,或者至少是运行时异常,那么无论改变值的是什么,都将失败。但是如果我这样做,代码就不会失败——它工作得很好! 有谁能帮我理解这里可能发生的事情吗?为什么这个浮动会变成零,除非我把它设为最终值?这里有我不熟悉的Java i

  • 我正在学习多线程,想写一些与竞争条件的代码。然而,这些代码不起作用:我已经运行了很多次代码,但它总是打印10,这是正确的结果,没有竞争条件。有人能说出原因吗?谢了。 下面是主要函数。它将创建10个线程来修改一个静态变量,并在最后打印这个变量。 以下是Foo的定义:

  • 问题内容: 例如: 问题答案: 这是因为从索引0 in开始的长度为0的子字符串等于空字符串: 当然,任何字符串的长度为零的 每个 子字符串都等于空字符串。