ScrollPane: fixed repainting on focus changes

This commit is contained in:
Karl Tauber
2019-08-30 13:43:13 +02:00
parent 42ba5a8fee
commit 5afacb6c1a

View File

@@ -48,18 +48,14 @@ public class FlatScrollPaneUI
protected void installListeners( JScrollPane c ) { protected void installListeners( JScrollPane c ) {
super.installListeners( c ); super.installListeners( c );
JViewport viewport = scrollpane.getViewport(); addViewportListeners( scrollpane.getViewport() );
if( viewport != null )
viewport.addContainerListener( getHandler() );
} }
@Override @Override
protected void uninstallListeners( JComponent c ) { protected void uninstallListeners( JComponent c ) {
super.uninstallListeners( c ); super.uninstallListeners( c );
JViewport viewport = scrollpane.getViewport(); removeViewportListeners( scrollpane.getViewport() );
if( viewport != null )
viewport.removeContainerListener( getHandler() );
handler = null; handler = null;
} }
@@ -77,20 +73,30 @@ public class FlatScrollPaneUI
JViewport oldViewport = (JViewport) (e.getOldValue()); JViewport oldViewport = (JViewport) (e.getOldValue());
JViewport newViewport = (JViewport) (e.getNewValue()); JViewport newViewport = (JViewport) (e.getNewValue());
if( oldViewport != null ) { removeViewportListeners( oldViewport );
oldViewport.removeContainerListener( getHandler() ); addViewportListeners( newViewport );
}
Component oldView = oldViewport.getView(); private void addViewportListeners( JViewport viewport ) {
if( oldView != null ) if( viewport == null )
oldView.removeFocusListener( getHandler() ); return;
}
if( newViewport != null ) {
newViewport.addContainerListener( getHandler() );
Component newView = newViewport.getView(); viewport.addContainerListener( getHandler() );
if( newView != null )
newView.addFocusListener( getHandler() ); Component view = viewport.getView();
} if( view != null )
view.addFocusListener( getHandler() );
}
private void removeViewportListeners( JViewport viewport ) {
if( viewport == null )
return;
viewport.removeContainerListener( getHandler() );
Component view = viewport.getView();
if( view != null )
view.removeFocusListener( getHandler() );
} }
@Override @Override