From 0880a3380c841409e244ff8afe867f510410eb04 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sun, 7 Jun 2020 23:22:57 +0200 Subject: [PATCH] Window decorations: hide drag border components if frame is maximized --- .../formdev/flatlaf/ui/FlatWindowResizer.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowResizer.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowResizer.java index 3a5c8e65..969f27e5 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowResizer.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowResizer.java @@ -32,6 +32,8 @@ import java.awt.event.ComponentListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; +import java.awt.event.WindowEvent; +import java.awt.event.WindowStateListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JComponent; @@ -47,7 +49,7 @@ import com.formdev.flatlaf.util.UIScale; */ class FlatWindowResizer extends JComponent - implements PropertyChangeListener, ComponentListener + implements PropertyChangeListener, WindowStateListener, ComponentListener { private final static Integer WINDOW_RESIZER_LAYER = JLayeredPane.DRAG_LAYER + 1; @@ -86,8 +88,10 @@ class FlatWindowResizer Container parent = rootPane.getParent(); window = (parent instanceof Window) ? (Window) parent : null; - if( window instanceof Frame ) + if( window instanceof Frame ) { window.addPropertyChangeListener( "resizable", this ); + window.addWindowStateListener( this ); + } updateVisibility(); } @@ -96,8 +100,10 @@ class FlatWindowResizer public void removeNotify() { super.removeNotify(); - if( window instanceof Frame ) + if( window instanceof Frame ) { window.removePropertyChangeListener( "resizable", this ); + window.removeWindowStateListener( this ); + } window = null; updateVisibility(); @@ -123,7 +129,7 @@ class FlatWindowResizer private boolean isWindowResizable() { if( window instanceof Frame ) - return ((Frame)window).isResizable(); + return ((Frame)window).isResizable() && (((Frame)window).getExtendedState() & Frame.MAXIMIZED_BOTH) == 0; if( window instanceof Dialog ) return ((Dialog)window).isResizable(); return false; @@ -134,6 +140,11 @@ class FlatWindowResizer updateVisibility(); } + @Override + public void windowStateChanged( WindowEvent e ) { + updateVisibility(); + } + @Override public void componentResized( ComponentEvent e ) { setBounds( 0, 0, rootPane.getWidth(), rootPane.getHeight() );