diff --git a/CHANGELOG.md b/CHANGELOG.md index b8345fc8..eda2a671 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ FlatLaf Change Log - Button and ToggleButton: Support disabled background color (use UI values `Button.disabledBackground` and `ToggleButton.disabledBackground`). (issue #112) +- TableHeader: Support top/bottom/left positioned sort arrow when using + [Glazed Lists](https://github.com/glazedlists/glazedlists). (issue #113) ## 0.36 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 e5c7754e..227bb478 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 @@ -86,26 +86,12 @@ public class FlatTableHeaderUI case "top": sortIconPosition = SwingConstants.TOP; break; case "bottom": sortIconPosition = SwingConstants.BOTTOM; break; } - - // use own renderer if necessary - if( sortIconPosition != SwingConstants.RIGHT ) { - TableCellRenderer defaultRenderer = header.getDefaultRenderer(); - if( defaultRenderer instanceof UIResource ) - header.setDefaultRenderer( new FlatTableCellHeaderRenderer( defaultRenderer ) ); - } } @Override protected void uninstallDefaults() { super.uninstallDefaults(); - // restore default renderer - TableCellRenderer defaultRenderer = header.getDefaultRenderer(); - if( defaultRenderer instanceof FlatTableCellHeaderRenderer ) { - ((FlatTableCellHeaderRenderer)defaultRenderer).reset(); - header.setDefaultRenderer( ((FlatTableCellHeaderRenderer)defaultRenderer).delegate ); - } - separatorColor = null; bottomSeparatorColor = null; } @@ -125,8 +111,22 @@ public class FlatTableHeaderUI if( paintBorders ) paintColumnBorders( g, c ); + // temporary use own default renderer if necessary + FlatTableCellHeaderRenderer sortIconRenderer = null; + if( sortIconPosition != SwingConstants.RIGHT ) { + sortIconRenderer = new FlatTableCellHeaderRenderer( header.getDefaultRenderer() ); + header.setDefaultRenderer( sortIconRenderer ); + } + + // paint header super.paint( g, c ); + // restore default renderer + if( sortIconRenderer != null ) { + sortIconRenderer.reset(); + header.setDefaultRenderer( sortIconRenderer.delegate ); + } + if( paintBorders ) paintDraggedColumnBorders( g, c ); } @@ -257,6 +257,7 @@ public class FlatTableHeaderUI { private final TableCellRenderer delegate; + private JLabel l; private int oldHorizontalTextPosition = -1; private Border origBorder; private Icon sortIcon; @@ -273,7 +274,7 @@ public class FlatTableHeaderUI if( !(c instanceof JLabel) ) return c; - JLabel l = (JLabel) c; + l = (JLabel) c; if( sortIconPosition == SwingConstants.LEFT ) { if( oldHorizontalTextPosition < 0 ) @@ -291,11 +292,8 @@ public class FlatTableHeaderUI } void reset() { - if( sortIconPosition == SwingConstants.LEFT && oldHorizontalTextPosition >= 0 ) { - Component c = getTableCellRendererComponent( header.getTable(), "", false, false, -1, 0 ); - if( c instanceof JLabel && ((JLabel)c).getHorizontalTextPosition() == SwingConstants.RIGHT ) - ((JLabel)c).setHorizontalTextPosition( oldHorizontalTextPosition ); - } + if( l != null && sortIconPosition == SwingConstants.LEFT && oldHorizontalTextPosition >= 0 ) + l.setHorizontalTextPosition( oldHorizontalTextPosition ); } @Override