如何重置 JTable 列箭头
How to reset JTable column arrows
我正在为我的 JTable 使用 sortable 列:
table.setAutoCreateRowSorter(true);
问题是在用户单击列后 header 无法删除箭头。即使我删除了 table.
中的所有行
我试过反其道而行之:
table.setAutoCreateRowSorter(false);
箭头没有被移除的事实似乎是绘画问题。调用 table.getTableHeader().repaint()
似乎让箭头消失了。
完整示例:
public class JTableSortRestore {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
runGui();
});
}
private static void runGui() {
JFrame frame = new JFrame("");
frame.setLayout(new BorderLayout());
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Col");
model.addRow(new String[] { "BBB" });
model.addRow(new String[] { "AAA" });
model.addRow(new String[] { "CCC" });
JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);
frame.add(new JScrollPane(table));
JButton restoreButton = new JButton("Restore sorting");
restoreButton.addActionListener(e -> {
table.setAutoCreateRowSorter(false);
table.setAutoCreateRowSorter(true);
table.getTableHeader().repaint();
});
frame.add(restoreButton, BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}
我正在为我的 JTable 使用 sortable 列:
table.setAutoCreateRowSorter(true);
问题是在用户单击列后 header 无法删除箭头。即使我删除了 table.
中的所有行我试过反其道而行之:
table.setAutoCreateRowSorter(false);
箭头没有被移除的事实似乎是绘画问题。调用 table.getTableHeader().repaint()
似乎让箭头消失了。
完整示例:
public class JTableSortRestore {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
runGui();
});
}
private static void runGui() {
JFrame frame = new JFrame("");
frame.setLayout(new BorderLayout());
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Col");
model.addRow(new String[] { "BBB" });
model.addRow(new String[] { "AAA" });
model.addRow(new String[] { "CCC" });
JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);
frame.add(new JScrollPane(table));
JButton restoreButton = new JButton("Restore sorting");
restoreButton.addActionListener(e -> {
table.setAutoCreateRowSorter(false);
table.setAutoCreateRowSorter(true);
table.getTableHeader().repaint();
});
frame.add(restoreButton, BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}