У меня есть JTable, который можно сортировать, вызывая сортировку по вызову setAutoCreateRowSorter (true) при инициализации). Я сортирую эту таблицу программно, и я хотел бы отключить обработку событий по умолчанию в заголовке таблицы, так что таблица может быть отсортирована программно только. Как его достичь?JTable сортировка программно только
рабочая часть кода будет:
public class SortTable extends JDialog {
private JTable table;
DefaultRowSorter<TableModel, String> sorter;
public SortTable() {
JScrollPane scrollPane = new JScrollPane();
setBounds(0, 0, 300, 200);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(scrollPane, BorderLayout.CENTER);
//-------most important stuff-------------------
table = new JTable();
table.setAutoCreateRowSorter(true); //enabling sorting
table.setModel(createModel());
sorter = (DefaultRowSorter<TableModel, String>)table.getRowSorter(); //store sorter to sort programatically later on
//-----------------------------------------------
scrollPane.setViewportView(table);
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
buttonPane.add(new JButton(getSortAction()));
}
private AbstractAction getSortAction() {
return new AbstractAction("Sort") {
@Override
public void actionPerformed(ActionEvent e) {
sorter.setSortKeys(Arrays.asList(new SortKey(0,SortOrder.ASCENDING)));
sorter.sort(); //sorting programatically
}
};
}
private DefaultTableModel createModel() {
return new DefaultTableModel(
new Object[][] {
{"1", "3"},
{"5", "2"},
{"4", null},
},
new String[] {
"A", "B"
}
);
}
}
Этот пример является JDialog содержащий JTable с Sort кнопку. Нажатие этой кнопки приведет к сортировке столбца A по возрастанию. Однако кнопка не является единственным способом сортировки таблицы - мы можем просто щелкнуть заголовок таблицы, чтобы изменить сортировку. Мой вопрос заключается в том, как сделать кнопку единственным способом сортировки таблицы. Было бы также полезно знать, как избавиться от стрелки, которая появляется при изменении сортировки.
similair вопросы были заданы в этом и в прошлом месяце несколько раз, поиск BZ нажмите на RowSorter тег, или TableRowSorter – mKorbel
@mKorbel darn, я должен иногда читать api doc ;-) – kleopatra