From c45a769aa36676476f47b9e6b7f189715298709d Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Tue, 2 Jun 2020 15:46:36 +0200 Subject: [PATCH] update JFrame/JDialog background color when switching Laf --- .../formdev/flatlaf/ui/FlatRootPaneUI.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java index 1f473487..f09b560e 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java @@ -16,8 +16,15 @@ package com.formdev.flatlaf.ui; +import java.awt.Color; +import java.awt.Container; import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JRootPane; +import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicRootPaneUI; /** @@ -35,4 +42,21 @@ public class FlatRootPaneUI instance = new FlatRootPaneUI(); return instance; } + + @Override + protected void installDefaults( JRootPane c ) { + super.installDefaults( c ); + + // Update background color of JFrame or JDialog parent to avoid bad border + // on HiDPI screens when switching from light to dark Laf. + // The background of JFrame is initialized in JFrame.frameInit() and + // the background of JDialog in JDialog.dialogInit(), + // but it was not updated when switching Laf. + Container parent = c.getParent(); + if( parent instanceof JFrame || parent instanceof JDialog ) { + Color background = parent.getBackground(); + if( background == null || background instanceof UIResource ) + parent.setBackground( UIManager.getColor( "control" ) ); + } + } }