From 8dbbe208404f85ad17873b25312eb5b24ba80b32 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Mon, 6 Jan 2020 15:18:38 +0100 Subject: [PATCH] TableHeader: paint column borders also if renderer has changed, but delegates to the system default renderer (e.g. done in NetBeans class ETableHeader) --- CHANGELOG.md | 7 +++++++ .../formdev/flatlaf/ui/FlatTableHeaderUI.java | 20 +++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bb8304d..fc076af3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ FlatLaf Change Log ================== +## Unreleased + +- TableHeader: Paint column borders if renderer has changed, but delegates to + the system default renderer (e.g. done in NetBeans). + + + ## 0.23.1 - Tree: Fixed wide selection if scrolled horizontally. diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderUI.java index 71d4d31f..42ad87e3 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderUI.java @@ -17,6 +17,7 @@ package com.formdev.flatlaf.ui; import java.awt.Color; +import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; @@ -29,6 +30,7 @@ import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicTableHeaderUI; +import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import com.formdev.flatlaf.util.UIScale; @@ -81,10 +83,14 @@ public class FlatTableHeaderUI @Override public void paint( Graphics g, JComponent c ) { // do not paint borders if JTableHeader.setDefaultRenderer() was used - String rendererClassName = header.getDefaultRenderer().getClass().getName(); - boolean paintBorders = - rendererClassName.equals( "sun.swing.table.DefaultTableCellHeaderRenderer" ) || - rendererClassName.equals( "sun.swing.FilePane$AlignableTableHeaderRenderer" ); + TableCellRenderer defaultRenderer = header.getDefaultRenderer(); + boolean paintBorders = isSystemDefaultRenderer( defaultRenderer ); + if( !paintBorders && header.getColumnModel().getColumnCount() > 0 ) { + // check whether the renderer delegates to the system default renderer + Component rendererComponent = defaultRenderer.getTableCellRendererComponent( + header.getTable(), "", false, false, -1, 0 ); + paintBorders = isSystemDefaultRenderer( rendererComponent ); + } if( paintBorders ) paintColumnBorders( g, c ); @@ -95,6 +101,12 @@ public class FlatTableHeaderUI paintDraggedColumnBorders( g, c ); } + private boolean isSystemDefaultRenderer( Object headerRenderer ) { + String rendererClassName = headerRenderer.getClass().getName(); + return rendererClassName.equals( "sun.swing.table.DefaultTableCellHeaderRenderer" ) || + rendererClassName.equals( "sun.swing.FilePane$AlignableTableHeaderRenderer" ); + } + private void paintColumnBorders( Graphics g, JComponent c ) { int width = c.getWidth(); int height = c.getHeight();