JTable + Sorting specific field
You need to implement comparator that treats date string as Date
rather simple String
have a look here
JTable Clickable Column Sorting: Sorting sorts content of cells, but doesn't update cell formatting?
you have to convert row index from View to the Model
int modelRow = convertRowIndexToModel(row);
JTable: How to sort a table where a specific row is always the first row?
Had make a CustomRowSorter basically a copy of the default DefaultRowSorter.
I couldn't extend the class as I had to make some changes to the private functions with regards to sorting.
Additionally I had to make my own copy of TableRowSorter which used the new CustomRowSorter. My table would then use the CustomTableRowSorter to get the job done. It's not a pretty implementation as copying the two files was 1.5k lines of change.
Java JTable Sorting Doesn't Work for Just One Column
I had to implement getColumnClass in my class that extends DefaultTableModel.
public class MyTableModel extends DefaultTableModel {
public MyTableModel(Object[][] data, Object[] columnNames) {
super(data, columnNames);
}
@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
jTable disable sort on specific column
Disable sorting for a specific column with the sorting
option. See the documentation here.
There is also a demo of it in action here - have a look at the "Record date" column and its code.
DownloadUrls: {
...
sorting: false
}
JTable Sorting based on hidden column
you can add by default TableRowSorter to JTable but there is RowSorter, nothing better and clear around as Darryl's Multisort Table Header Cell Renderer
note definitions for RowSorter is valid only for concrete TableColumn
siple example (with use-less balast again)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class HeaderDoubleclickTest {
private String[] columnNames = {"String", "Integer", "Boolean"};
private Object[][] data = {
{"aaa", 12, true}, {"bbb", 5, false},
{"CCC", 92, true}, {"DDD", 0, false}
};
private TableModel model = new DefaultTableModel(data, columnNames) {
private static final long serialVersionUID = 1L;
@Override
public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
private JTable table = new JTable(model);
private JTableHeader header;
static class TestTableRowSorter extends TableRowSorter<TableModel> {
TestTableRowSorter(TableModel m) {
super(m);
}
@Override
public void toggleSortOrder(int column) {
}
public void wrapToggleSortOrder(int column) {
super.toggleSortOrder(column);
}
}
private Timer timer = new Timer(400, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("single");
JTable table = header.getTable();
RowSorter sorter;
if (pt != null && table != null && (sorter = table.getRowSorter()) != null) {
int columnIndex = header.columnAtPoint(pt);
if (columnIndex != -1) {
columnIndex = table.convertColumnIndexToModel(columnIndex);
((TestTableRowSorter) sorter).wrapToggleSortOrder(columnIndex);
}
}
}
});
private Point pt;
public JComponent makeUI() {
timer.setRepeats(false);
table.setRowSorter(new TestTableRowSorter(model));
header = table.getTableHeader();
header.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
if (timer.isRunning() && !e.isConsumed() && e.getClickCount() > 1) {
System.out.println("double");
pt = null;
timer.stop();
} else {
pt = e.getPoint();
timer.restart();
}
}
});
JPanel p = new JPanel(new BorderLayout());
p.add(new JScrollPane(table));
return p;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new HeaderDoubleclickTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
Related Topics
Possible to Use Two Java Classes with Same Name and Same Package
Class Object of Generic Class (Java)
Java - How to Create New Entry (Key, Value)
Uninitialized Object VS Object Initialized to Null
How to Attach Multiple Files to an Email Using Javamail
How to Add Button in a Row of Jtable in Swing Java
Maximum Size of Hashset, Vector, Linkedlist
Jframe.Dispose() VS System.Exit()
Difference Between Wait and Blocked Thread States
How to Dynamically Build a Multi-Dimensional Array in Java
Converting to Upper and Lower Case in Java
Java: Import Statement VS Fully Qualified Name
Java: How to Do Double-Buffering in Swing
Observer Is Deprecated in Java 9. What Should We Use Instead of It