Skip to content

已阅读

0%

WebTableHeader表头样式设置

Java Swing WebLaf-UI

通过setCustomPainter(@NotNull final Painter painter)方法从新设置样式

标签:
Swing WebLaf-UI
发布于 2023年4月5日
更新于 2023年4月5日

获取表头

java
WebTable table = new WebTable();
// table.xxx() table相关设置
// 获取表头 ↓↓
WebTableHeader tableHeader = table.getTableHeader();

自定义painter类

setHeaderHeight,setTopBgColor,setBottomBgColor,setGridColor新增set方法,方便调用动态变更颜色,重写paintCell方法可以设置表头单元格样式包括收个单元格设置成复选框等,需求是设置表头颜色所以此处只做了表头颜色边框等相关的set方法来方便外部调用

java
public class CustomTableHeaderPainter<C extends JTableHeader, U extends WTableHeaderUI> extends TableHeaderPainter<C, U> {

    /**
     * 设置行高
     *
     * @param headerHeight 行高
     */
    public void setHeaderHeight(int headerHeight) {
        this.headerHeight = headerHeight;
    }

    /**
     * 由上自下渐变色 上颜色
     *
     * @param topBgColor {@link Color}
     */
    public void setTopBgColor(Color topBgColor) {
        this.topBgColor = topBgColor;
    }

    /**
     * 由上自下渐变色 下颜色
     *
     * @param bottomBgColor {@link Color}
     */
    public void setBottomBgColor(Color bottomBgColor) {
        this.bottomBgColor = bottomBgColor;
    }

    /**
     * 表头边框颜色
     *
     * @param gridColor {@link Color}
     */
    public void setGridColor(Color gridColor) {
        this.gridColor = gridColor;
    }

    /**
     * 重写paintCell方法
     */
    @Override
    protected void paintCell ( final Graphics2D g2d, final C c, final Rectangle rect, final int columnIndex, final TableColumn column,
                               final TableColumn draggedColumn, final TableColumnModel columnModel )
    {
        // 表格参考
        final JTable table = c.getTable ();

        // 复杂的检查,以确定在什么情况下应该涂抹尾部边界
        // 可以为中间的列、被拖动的列或当表格小于视口时绘制。
        final JScrollPane scrollPane = SwingUtils.getScrollPane ( table );
        final boolean paintTrailingBorder = scrollPane != null && ( column == draggedColumn ||
                table.getAutoResizeMode () == JTable.AUTO_RESIZE_OFF && scrollPane.getViewport ().getWidth () > table.getWidth () ||
                ( ltr ? columnIndex != columnModel.getColumnCount () - 1 : columnIndex != 0 ) );

        // 左侧边框
        if ( ltr || paintTrailingBorder )
        {
            g2d.setColor ( gridColor );
            g2d.drawLine ( rect.x - 1, rect.y + 2, rect.x - 1, rect.y + rect.height - 4 );
        }

        // 绘制拖动的单元格渲染器
        final WebLabel headerRenderer = ( WebLabel ) getHeaderRenderer ( columnIndex );
        headerRenderer.setStyleId(StyleId.label);
            headerRenderer.setOpaque ( false );
        headerRenderer.setEnabled ( table == null || table.isEnabled () );
        rendererPane.paintComponent ( g2d, headerRenderer, component, rect.x, rect.y, rect.width, rect.height, true );

        // 右侧边框
        if ( !ltr || paintTrailingBorder )
        {
            g2d.setColor ( gridColor );
            g2d.drawLine ( rect.x + rect.width - 1, rect.y + 2, rect.x + rect.width - 1, rect.y + rect.height - 4 );
        }
    }

}

设置自定义样式

设置边框,背景渐变色

java
CustomTableHeaderPainter<WebTableHeader, WebTableHeaderUI> painter = new CustomTableHeaderPainter<>();
        // 设置行高
        painter.setHeaderHeight(table.getRowHeight() + 10);
        // 设置渐变色,由上到下
        painter.setTopBgColor(Color.BLUE);
        painter.setBottomBgColor(Color.CYAN);
        // 设置边框颜色
        painter.setGridColor(Color.BLACK);
        tableHeader.setCustomPainter(painter);

Last updated: