From 9c91c29dcb8ac2083158df1d003c609624b9dc3f Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Thu, 29 Aug 2019 20:07:19 +0200 Subject: [PATCH] PasswordField, TextField and ScrollPane: release Handler object on uninstall --- .../flatlaf/ui/FlatPasswordFieldUI.java | 14 +++++++++--- .../formdev/flatlaf/ui/FlatScrollPaneUI.java | 22 +++++++++++++------ .../formdev/flatlaf/ui/FlatTextFieldUI.java | 14 +++++++++--- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java index 6f890533..34aa5931 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java @@ -41,7 +41,7 @@ public class FlatPasswordFieldUI { protected int focusWidth; - private final Handler handler = new Handler(); + private Handler handler; public static ComponentUI createUI( JComponent c ) { return new FlatPasswordFieldUI(); @@ -58,14 +58,22 @@ public class FlatPasswordFieldUI protected void installListeners() { super.installListeners(); - getComponent().addFocusListener( handler ); + getComponent().addFocusListener( getHandler() ); } @Override protected void uninstallListeners() { super.uninstallListeners(); - getComponent().removeFocusListener( handler ); + getComponent().removeFocusListener( getHandler() ); + + handler = null; + } + + public Handler getHandler() { + if( handler == null ) + handler = new Handler(); + return handler; } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java index 8695925c..7e39c6d1 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java @@ -38,7 +38,7 @@ import javax.swing.plaf.basic.BasicScrollPaneUI; public class FlatScrollPaneUI extends BasicScrollPaneUI { - private final Handler handler = new Handler(); + private Handler handler; public static ComponentUI createUI( JComponent c ) { return new FlatScrollPaneUI(); @@ -50,7 +50,7 @@ public class FlatScrollPaneUI JViewport viewport = scrollpane.getViewport(); if( viewport != null ) - viewport.addContainerListener( handler ); + viewport.addContainerListener( getHandler() ); } @Override @@ -59,7 +59,15 @@ public class FlatScrollPaneUI JViewport viewport = scrollpane.getViewport(); if( viewport != null ) - viewport.removeContainerListener( handler ); + viewport.removeContainerListener( getHandler() ); + + handler = null; + } + + public Handler getHandler() { + if( handler == null ) + handler = new Handler(); + return handler; } @Override @@ -70,18 +78,18 @@ public class FlatScrollPaneUI JViewport newViewport = (JViewport) (e.getNewValue()); if( oldViewport != null ) { - oldViewport.removeContainerListener( handler ); + oldViewport.removeContainerListener( getHandler() ); Component oldView = oldViewport.getView(); if( oldView != null ) - oldView.removeFocusListener( handler ); + oldView.removeFocusListener( getHandler() ); } if( newViewport != null ) { - newViewport.addContainerListener( handler ); + newViewport.addContainerListener( getHandler() ); Component newView = newViewport.getView(); if( newView != null ) - newView.addFocusListener( handler ); + newView.addFocusListener( getHandler() ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java index 3f841b31..0e1f065d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java @@ -41,7 +41,7 @@ public class FlatTextFieldUI { protected int focusWidth; - private final Handler handler = new Handler(); + private Handler handler; public static ComponentUI createUI( JComponent c ) { return new FlatTextFieldUI(); @@ -58,14 +58,22 @@ public class FlatTextFieldUI protected void installListeners() { super.installListeners(); - getComponent().addFocusListener( handler ); + getComponent().addFocusListener( getHandler() ); } @Override protected void uninstallListeners() { super.uninstallListeners(); - getComponent().removeFocusListener( handler ); + getComponent().removeFocusListener( getHandler() ); + + handler = null; + } + + public Handler getHandler() { + if( handler == null ) + handler = new Handler(); + return handler; } @Override