Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jtable行分类器图标_Java_Swing_Icons_Jtable_Tablerowsorter - Fatal编程技术网

Java Jtable行分类器图标

Java Jtable行分类器图标,java,swing,icons,jtable,tablerowsorter,Java,Swing,Icons,Jtable,Tablerowsorter,我有一个使用RowSorter(Java1.6)的JTable,我使用的是使用Java1.4实现的外观,当时RowSorter没有添加到Java中。现在我的问题是:当我点击表格标题时,表格会被排序,但RosSorter图标不会出现在表格标题上。我需要这个图标,但我无法升级现有的外观。有什么帮助吗?基本方法是包装LAF提供的渲染器,让它配置渲染组件,并根据需要另外绘制排序图标。比如: final TableCellRenderer r = table.getTableHeader().getDef

我有一个使用RowSorter(Java1.6)的JTable,我使用的是使用Java1.4实现的外观,当时RowSorter没有添加到Java中。现在我的问题是:当我点击表格标题时,表格会被排序,但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);
final TableCellRenderer r=table.getTableHeader().getDefaultRenderer();
TableCellRenderer包装器=新的TableCellRenderer(){
@凌驾
公共组件GetTableCellRenderComponent(JTable表,
对象值,布尔isSelected,布尔hasFocus,
整数行,整数列){
Component comp=r.GetTableCellRenderComponent(表、值、isSelected、,
hasFocus(焦点、行、列);
if(JLabel的组件实例){
JLabel标签=(JLabel)comp;
label.setIcon(getSortIcon(表、列));
}
返回补偿;
}
/**
*实现选择适当图标的逻辑。
*/
私有图标getSortIcon(JTable表,int列){
SortOrder SortOrder=getColumnSortOrder(表,列);
if(SortOrder.UNSORTED==SortOrder){
返回null;
}
return SortOrder.ASCENDING==排序器?上升图标:下降图标;
}
私有排序器getColumnSortOrder(JTable表,int列){
if(table==null | | table.getRowSorter()==null){
返回SortOrder.UNSORTED;
}

Listpost是一个简短、可运行、可编译的JFrame,在JScrollPane中带有JTable(带有硬编码值),有一些用户可以在JDK1.4.xxx中编译。基本上,您需要为显示图标的标题修补渲染器。“我使用的是使用Java 1.4实现的外观”你指的是一个公开的第三方PLAF吗?它是哪一个PLAF?@kleopatra:怎么做…请解释一下…@Andrew:我在一家公司实习,包含look and feel类的jar是该公司的私有财产。只是一个疑问:在代码中,你刚刚设置了图标,但图标是如何得到回复的AcEd或移动?高兴它工作,女人:-你可能会考虑投票/接受答案,只是说……不明白你的第二个评论:图标被设置为一个排序图标或空(AKA:没有被替换)