java - Jtable RowSorter 图标

标签 java swing icons jtable tablerowsorter

我有一个使用 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/

相关文章:

java - Eclipse 在尝试使用 WritableList 调用构造函数时提示歧义

java - 在 JTable 上禁用 CTRL+C(双击单元格后)

java - 当用户单击我的应用程序窗口上的某个点时,如何更改 java 中的背景颜色?

java - Swing 登录面板

html - 如何仅使用 css 显示简单的图标

java - Tomcat内存消耗问题

java - GSON 不返回 JSON key

java - 如何在 MongoDb 中保存时间戳类型值 | java

android - 带有文本和图标的微调器

javascript - Ant Design 如何设置图标大小?