Jtable + Sorting Specific Field

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



Leave a reply



Submit