PasswordField, TextField and ScrollPane: release Handler object on uninstall

This commit is contained in:
Karl Tauber
2019-08-29 20:07:19 +02:00
parent 9c1fa1d802
commit 9c91c29dcb
3 changed files with 37 additions and 13 deletions

View File

@@ -41,7 +41,7 @@ public class FlatPasswordFieldUI
{ {
protected int focusWidth; protected int focusWidth;
private final Handler handler = new Handler(); private Handler handler;
public static ComponentUI createUI( JComponent c ) { public static ComponentUI createUI( JComponent c ) {
return new FlatPasswordFieldUI(); return new FlatPasswordFieldUI();
@@ -58,14 +58,22 @@ public class FlatPasswordFieldUI
protected void installListeners() { protected void installListeners() {
super.installListeners(); super.installListeners();
getComponent().addFocusListener( handler ); getComponent().addFocusListener( getHandler() );
} }
@Override @Override
protected void uninstallListeners() { protected void uninstallListeners() {
super.uninstallListeners(); super.uninstallListeners();
getComponent().removeFocusListener( handler ); getComponent().removeFocusListener( getHandler() );
handler = null;
}
public Handler getHandler() {
if( handler == null )
handler = new Handler();
return handler;
} }
@Override @Override

View File

@@ -38,7 +38,7 @@ import javax.swing.plaf.basic.BasicScrollPaneUI;
public class FlatScrollPaneUI public class FlatScrollPaneUI
extends BasicScrollPaneUI extends BasicScrollPaneUI
{ {
private final Handler handler = new Handler(); private Handler handler;
public static ComponentUI createUI( JComponent c ) { public static ComponentUI createUI( JComponent c ) {
return new FlatScrollPaneUI(); return new FlatScrollPaneUI();
@@ -50,7 +50,7 @@ public class FlatScrollPaneUI
JViewport viewport = scrollpane.getViewport(); JViewport viewport = scrollpane.getViewport();
if( viewport != null ) if( viewport != null )
viewport.addContainerListener( handler ); viewport.addContainerListener( getHandler() );
} }
@Override @Override
@@ -59,7 +59,15 @@ public class FlatScrollPaneUI
JViewport viewport = scrollpane.getViewport(); JViewport viewport = scrollpane.getViewport();
if( viewport != null ) if( viewport != null )
viewport.removeContainerListener( handler ); viewport.removeContainerListener( getHandler() );
handler = null;
}
public Handler getHandler() {
if( handler == null )
handler = new Handler();
return handler;
} }
@Override @Override
@@ -70,18 +78,18 @@ public class FlatScrollPaneUI
JViewport newViewport = (JViewport) (e.getNewValue()); JViewport newViewport = (JViewport) (e.getNewValue());
if( oldViewport != null ) { if( oldViewport != null ) {
oldViewport.removeContainerListener( handler ); oldViewport.removeContainerListener( getHandler() );
Component oldView = oldViewport.getView(); Component oldView = oldViewport.getView();
if( oldView != null ) if( oldView != null )
oldView.removeFocusListener( handler ); oldView.removeFocusListener( getHandler() );
} }
if( newViewport != null ) { if( newViewport != null ) {
newViewport.addContainerListener( handler ); newViewport.addContainerListener( getHandler() );
Component newView = newViewport.getView(); Component newView = newViewport.getView();
if( newView != null ) if( newView != null )
newView.addFocusListener( handler ); newView.addFocusListener( getHandler() );
} }
} }

View File

@@ -41,7 +41,7 @@ public class FlatTextFieldUI
{ {
protected int focusWidth; protected int focusWidth;
private final Handler handler = new Handler(); private Handler handler;
public static ComponentUI createUI( JComponent c ) { public static ComponentUI createUI( JComponent c ) {
return new FlatTextFieldUI(); return new FlatTextFieldUI();
@@ -58,14 +58,22 @@ public class FlatTextFieldUI
protected void installListeners() { protected void installListeners() {
super.installListeners(); super.installListeners();
getComponent().addFocusListener( handler ); getComponent().addFocusListener( getHandler() );
} }
@Override @Override
protected void uninstallListeners() { protected void uninstallListeners() {
super.uninstallListeners(); super.uninstallListeners();
getComponent().removeFocusListener( handler ); getComponent().removeFocusListener( getHandler() );
handler = null;
}
public Handler getHandler() {
if( handler == null )
handler = new Handler();
return handler;
} }
@Override @Override