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;
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

View File

@@ -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() );
}
}

View File

@@ -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