2323
2424import java .awt .Component ;
2525import java .awt .Container ;
26+ import java .lang .ref .WeakReference ;
2627import java .util .ArrayList ;
2728import java .util .List ;
29+ import java .util .Optional ;
2830
2931/**
3032 * Purpose: To recursively disable (and later re-enable) all components of a
@@ -45,7 +47,7 @@ final public class EverythingDisablerAndReenabler
4547
4648 final private Class < ? >[] componentClassesToBeIgnored ;
4749
48- final private List < Component > componentsToReenable = new ArrayList <>();
50+ final private List < WeakReference < Component > > componentsToReenable = new ArrayList <>();
4951
5052 private boolean disableHasBeenCalled = false ;
5153 // Order is strictly upheld via IllegalStateException!
@@ -116,9 +118,8 @@ public void reenable()
116118 disableHasBeenCalled = false ;
117119
118120 for ( int i = componentsToReenable .size () - 1 ; i >= 0 ; i -- )
119- {
120- componentsToReenable .get ( i ).setEnabled ( true );
121- }
121+ Optional .ofNullable ( componentsToReenable .get ( i ).get () ).ifPresent ( c -> c .setEnabled ( true ) );
122+
122123 componentsToReenable .clear ();
123124 }
124125
@@ -156,7 +157,7 @@ private void disableEverythingInsideThisHierarchically( final Container containe
156157 if ( !found && component .isEnabled () )
157158 {
158159 component .setEnabled ( false );
159- componentsToReenable .add ( component );
160+ componentsToReenable .add ( new WeakReference <>( component ) );
160161 }
161162 }
162163 }
0 commit comments