我有一个非常简单的JTable,我想按列0升序对其进行排序。代码非常简单。但是它不能正确地对行进行排序。我不知道怎么了。以下是我的代码:
package test;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class TableSorter {
public static void main(String[] args) {
new TableSorter();
}
public TableSorter() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException |
IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
DefaultTableModel model = new DefaultTableModel(new String[] {"X", "Y", }, 0);
model.addRow(new Object[]{5, 8});
model.addRow(new Object[]{10, 5});
model.addRow(new Object[]{50, 60});
model.addRow(new Object[]{100, 60});
JTable table = new JTable(model);
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel());
table.setRowSorter(sorter);
List<RowSorter.SortKey> sortKeys = new ArrayList<>();
sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
sorter.setSortKeys(sortKeys);
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
这是我运行程序时的结果
结果:
X y
10 5
100 60
5 8
50 60
任何帮助将不胜感激。结果附后。提前致谢。
从DefaultTableModel的文档中:
警告:DefaultTableModel返回Object的列类。当将DefaultTableModel与TableRowSorter一起使用时,这将导致toString的广泛使用,这对于非String数据类型而言是昂贵的。如果将DefaultTableModel与TableRowSorter一起使用,则强烈建议重写getColumnClass以返回适当的类型。
您需要像这样重写表模型的getColumnClass:
DefaultTableModel model = new DefaultTableModel(new String[] {"X", "Y", }, 0)
{
@Override
public Class<?> getColumnClass(int column)
{
Class<?> returnValue;
if ((column >= 0) && (column < getColumnCount()))
{
returnValue = getValueAt(0, column).getClass();
}
else
{
returnValue = Object.class;
}
return returnValue;
};
};
在您的情况下,它是Integer.toString()
对整数进行比较,因此您会看到错误的顺序。通过重写getColumnClass()
为返回Integer
类型,您将获得整数与它们的值的比较。
当添加到JTable(包含表单元格中不同的JCombo Box)中的排序器/autoRowSorter用列标题排序时,Jcomo Box不会用相应的行排序。 单击JCombo框可以更改它在显示组合框的模型值而不是视图值(与行相关的值)中结束的数据。 在互联网上找到的例子,用同样的方法来说明问题。我刚刚添加了setAutoCreateRowSorter(真) 代码参考: 如何在Swing中的JTab
问题内容: 如何使用单选按钮对jtable列进行排序? 我的jtable是defaultTableModel而不是向量。 当用户按下列标题时,我已经实现了,它将进行排序,现在我必须使用单选按钮来实现。 实现此目标的最佳方法是什么? 问题答案: 要以编程方式进行排序,请将以下代码添加到侦听器中:
我将行排序器应用于,Table检索太多记录,当用户单击表头对特殊字段进行排序时,会导致问题并应用程序崩溃。我想在表尚未完全加载时禁用排序!我该怎么办?
在我的 spring boot 应用程序中,我无法使用在带注释的类上正确排序 swagger JSON。 然后,当我在URL < code > http://localhost:[port]/[servlet-context-path]/v2/API-docs 请求Json输出时,位置顺序似乎不起作用:
问题内容: 我已经弄清楚了如何正确地对a 进行排序,但是当表单元发生更改时,我无法弄清楚如何自动更新排序顺序。现在,我有这段代码(很长),主要是基于Java教程的How to Use Tables中的代码 。我强调了我所做的更改。在这种情况下,新添加的值可以正确排序,但是当我进入编辑值时,即使我打电话给我,它似乎也没有采取任何措施。 简而言之,当模型中的数据值更改时,如何使表重新排序? 问题答案:
我创建了自己的linkedlist。我想使用集合对我的linkedlist进行排序。排序方法。所以我将MyLinkedList类扩展到java。util。链接列表。我还创建了Comparator和Comparable实现。但两者都不起作用。请查找下面的代码。 //链接列表实现。 //测试链接列表 //员工类