[英]How to disable column header sorting in a jtable after RowFilter filtering is applied
我有一個JTable
,當單擊JToggleButton
時會傳遞給另一個類,出現帶有過濾參數的彈出窗口,並使用帶有給定參數的RowFilter
過濾JTable
。 當我顯示過濾正在按預期發生。 但是,當我單擊列標題排序時,行將根據原始JTable
值進行排序,而不僅僅是過濾后的行。
如何禁用這樣的排序? 請幫我。
您可以覆蓋TableRowSorter
的isSortable(int)
方法以防止對該列進行排序:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class DisableSortingTest {
private static String[] columnNames = {"ID", "NAME", "SALARY"};
private static Object[][] data = {
{1, "abcd", 2000},
{2, "xyz", 1800},
{3, "ijkl", 4600},
{4, "pqrs", 3400},
{5, "efgh", 5000}
};
private final DefaultTableModel model = new DefaultTableModel(data, columnNames) {
@Override public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
private final JCheckBox checkBox = new JCheckBox("filter");
private final RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>() {
@Override public boolean include(Entry<? extends TableModel, ? extends Integer> entry) {
return "pqrs".equals(entry.getModel().getValueAt(entry.getIdentifier(), 1));
}
};
private final JTable table = new JTable(model);
private final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model) {
@Override public boolean isSortable(int column) {
return getRowFilter() == null;
}
};
public JComponent makeUI() {
table.setRowSorter(sorter);
checkBox.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
JCheckBox c = (JCheckBox) e.getSource();
sorter.setRowFilter(c.isSelected() ? filter : null);
sorter.setSortKeys(null);
}
});
JPanel p = new JPanel(new BorderLayout());
p.add(checkBox, BorderLayout.NORTH);
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 DisableSortingTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.