Java SE 6 Стрелки для ASC/DESC выше заголовок-Text (это должен быть заказчиком)TableRowSorter использование LookAndFeel из TableHeader, но собственный компаратор
Я использую, чтобы показать стрелки выше заголовок текста:
TableRowSorter sorter = new TableRowSorter();
sorter.setModel(table.getModel());
table.setRowSorter(sorter);
или
table.setAutoCreateRowSorter(true);
Стрелки для ASC/DESC выше заголовка-Text, это правильно. Я хочу использовать свой собственный компаратор, но в моем примере вызывается компаратор, но он не работает. Какой код нужно изменить для сортировки таблицы-строк моим собственным компаратором со стрелками над сортировкой заголовка-заголовка asc/desc?
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Collections;
import java.util.Comparator;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class JTableExample extends JFrame {
private JTable table;
private FooTableModel model;
public JTableExample() {
super("JTableExample");
setDefaultCloseOperation(EXIT_ON_CLOSE);
String plaf = UIManager.getSystemLookAndFeelClassName();
try {
UIManager.setLookAndFeel(plaf);
}
catch (ClassNotFoundException e) {}
catch (InstantiationException e) {}
catch (IllegalAccessException e) {}
catch (UnsupportedLookAndFeelException e) {}
SwingUtilities.updateComponentTreeUI(this);
Object[][] rowData = { { "a", "c" }, { "b", "b" }, { "c", "a" } };
Object[] columnHeaders = { "Header1", "Header2" };
model = new FooTableModel(rowData, columnHeaders);
table = new JTable(model);
table.setAutoCreateRowSorter(true);
table.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent evt) {
model.sortByColumn(table.columnAtPoint(evt.getPoint()));
}
});
Container c = getContentPane();
c.add(new JScrollPane(table), BorderLayout.CENTER);
pack();
setVisible(true);
}
public static void main(String[] args) {
new JTableExample();
}
class FooTableModel extends DefaultTableModel {
public FooTableModel(Object[][] rowData, Object[] headers) {
super(rowData, headers);
}
public void sortByColumn(final int clm) {
Collections.sort(this.dataVector, new Comparator() {
public int compare(Object o1, Object o2) {
Vector v1 = (Vector) o1;
Vector v2 = (Vector) o2;
String s1 = (String) v1.get(clm);
String s2 = (String) v2.get(clm);
return s1.compareTo(s2);
}
});
}
}
}
не может видеть diff (Win8/Java7), все работает, с пользовательским компаратором или нет, вопрос, если действительно нужен, как раз, просто переместите L & F в начало основного класса – mKorbel
@mKorbel мой обычный вопрос: что вы имеете в виду? – kleopatra
Сортировка Значки видны (после того, как L & F переместится из контруктора в нужное место в основной класс), затем работают сортировщики, и значки видны в JTableHeader (код OPs, размещенный здесь), similair/или если я перепробовал sorter.setComparator (int, new Компаратор() {... –
mKorbel