gpt4 book ai didi

java - Jtable RowSorter 图标

转载 作者:行者123 更新时间:2023-11-29 05:49:21 24 4
gpt4 key购买 nike

我有一个使用 RowSorter(Java 1.6) 的 JTable,我使用的是使用 Java 1.4 实现的外观,当时没有在 Java 中添加 RowSorter。现在我的问题是:当我点击表格标题时,表格得到排序但 RosSorter 图标没有出现在表格标题上。我不知何故需要那个图标,但我无法升级现有的外观。有什么帮助吗?

最佳答案

基本方法是包装由 LAF 提供的渲染器,让它配置渲染组件,另外让它根据需要绘制一个排序图标。像这样的东西:

final TableCellRenderer r = table.getTableHeader().getDefaultRenderer();
TableCellRenderer wrapper = new TableCellRenderer() {

@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
Component comp = r.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
if (comp instanceof JLabel) {
JLabel label = (JLabel) comp;
label.setIcon(getSortIcon(table, column));
}
return comp;
}

/**
* Implements the logic to choose the appropriate icon.
*/
private Icon getSortIcon(JTable table, int column) {
SortOrder sortOrder = getColumnSortOrder(table, column);
if (SortOrder.UNSORTED == sortOrder) {
return null;
}
return SortOrder.ASCENDING == sortOrder ? ascendingIcon : descendingIcon;
}

private SortOrder getColumnSortOrder(JTable table, int column) {
if (table == null || table.getRowSorter() == null) {
return SortOrder.UNSORTED;
}
List<? extends SortKey> keys = table.getRowSorter().getSortKeys();
if (keys.size() > 0) {
SortKey key = keys.get(0);
if (key.getColumn() == table.convertColumnIndexToModel(column)) {
return key.getSortOrder();
}
}
return SortOrder.UNSORTED;
}

};
table.getTableHeader().setDefaultRenderer(wrapper);

这是最简单的情况,如果呈现组件是一个 JLabel 并且不以其他方式使用其图标属性,则可以工作。

关于java - Jtable RowSorter 图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14561946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com