use lambdas for listeners (where possible) instead of extending Basic*UI.*Handler classes

some of those `Basic*UI.*Handler` classes may be deprecated in a future Java version (see https://github.com/openjdk/jdk/pull/1958)

this should also avoid loading of those `Basic*UI.*Handler` classes at runtime
This commit is contained in:
Karl Tauber
2021-03-17 00:34:35 +01:00
parent 310a4989dc
commit eafd0b3d06
5 changed files with 121 additions and 139 deletions

View File

@@ -38,7 +38,6 @@ import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import javax.swing.AbstractAction; import javax.swing.AbstractAction;
@@ -274,30 +273,28 @@ public class FlatComboBoxUI
@Override @Override
protected PropertyChangeListener createPropertyChangeListener() { protected PropertyChangeListener createPropertyChangeListener() {
return new BasicComboBoxUI.PropertyChangeHandler() { PropertyChangeListener superListener = super.createPropertyChangeListener();
@Override return e -> {
public void propertyChange( PropertyChangeEvent e ) { superListener.propertyChange( e );
super.propertyChange( e );
Object source = e.getSource(); Object source = e.getSource();
String propertyName = e.getPropertyName(); String propertyName = e.getPropertyName();
if( editor != null && if( editor != null &&
((source == comboBox && propertyName == "foreground") || ((source == comboBox && propertyName == "foreground") ||
(source == editor && propertyName == "enabled")) ) (source == editor && propertyName == "enabled")) )
{ {
// fix editor component colors // fix editor component colors
updateEditorColors(); updateEditorColors();
} else if( editor != null && source == comboBox && propertyName == "componentOrientation" ) { } else if( editor != null && source == comboBox && propertyName == "componentOrientation" ) {
ComponentOrientation o = (ComponentOrientation) e.getNewValue(); ComponentOrientation o = (ComponentOrientation) e.getNewValue();
editor.applyComponentOrientation( o ); editor.applyComponentOrientation( o );
} else if( editor != null && FlatClientProperties.PLACEHOLDER_TEXT.equals( propertyName ) ) } else if( editor != null && FlatClientProperties.PLACEHOLDER_TEXT.equals( propertyName ) )
editor.repaint(); editor.repaint();
else if( FlatClientProperties.COMPONENT_ROUND_RECT.equals( propertyName ) ) else if( FlatClientProperties.COMPONENT_ROUND_RECT.equals( propertyName ) )
comboBox.repaint(); comboBox.repaint();
else if( FlatClientProperties.MINIMUM_WIDTH.equals( propertyName ) ) else if( FlatClientProperties.MINIMUM_WIDTH.equals( propertyName ) )
comboBox.revalidate(); comboBox.revalidate();
}
}; };
} }
@@ -648,14 +645,12 @@ public class FlatComboBoxUI
@Override @Override
protected PropertyChangeListener createPropertyChangeListener() { protected PropertyChangeListener createPropertyChangeListener() {
return new BasicComboPopup.PropertyChangeHandler() { PropertyChangeListener superListener = super.createPropertyChangeListener();
@Override return e -> {
public void propertyChange( PropertyChangeEvent e ) { superListener.propertyChange( e );
super.propertyChange( e );
if( e.getPropertyName() == "renderer" ) if( e.getPropertyName() == "renderer" )
list.setCellRenderer( new PopupListCellRenderer() ); list.setCellRenderer( new PopupListCellRenderer() );
}
}; };
} }

View File

@@ -23,7 +23,6 @@ import java.awt.Insets;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.util.Objects; import java.util.Objects;
import javax.swing.InputMap; import javax.swing.InputMap;
@@ -168,30 +167,28 @@ public class FlatScrollBarUI
@Override @Override
protected PropertyChangeListener createPropertyChangeListener() { protected PropertyChangeListener createPropertyChangeListener() {
return new BasicScrollBarUI.PropertyChangeHandler() { PropertyChangeListener superListener = super.createPropertyChangeListener();
@Override return e -> {
public void propertyChange( PropertyChangeEvent e ) { superListener.propertyChange( e );
super.propertyChange( e );
switch( e.getPropertyName() ) { switch( e.getPropertyName() ) {
case FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS: case FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS:
scrollbar.revalidate(); scrollbar.revalidate();
scrollbar.repaint(); scrollbar.repaint();
break; break;
case "componentOrientation": case "componentOrientation":
// this is missing in BasicScrollBarUI.Handler.propertyChange() // this is missing in BasicScrollBarUI.Handler.propertyChange()
InputMap inputMap = (InputMap) UIManager.get( "ScrollBar.ancestorInputMap" ); InputMap inputMap = (InputMap) UIManager.get( "ScrollBar.ancestorInputMap" );
if( !scrollbar.getComponentOrientation().isLeftToRight() ) { if( !scrollbar.getComponentOrientation().isLeftToRight() ) {
InputMap rtlInputMap = (InputMap) UIManager.get( "ScrollBar.ancestorInputMap.RightToLeft" ); InputMap rtlInputMap = (InputMap) UIManager.get( "ScrollBar.ancestorInputMap.RightToLeft" );
if( rtlInputMap != null ) { if( rtlInputMap != null ) {
rtlInputMap.setParent( inputMap ); rtlInputMap.setParent( inputMap );
inputMap = rtlInputMap; inputMap = rtlInputMap;
}
} }
SwingUtilities.replaceUIInputMap( scrollbar, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap ); }
break; SwingUtilities.replaceUIInputMap( scrollbar, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap );
} break;
} }
}; };
} }

View File

@@ -105,19 +105,17 @@ public class FlatScrollPaneUI
@Override @Override
protected MouseWheelListener createMouseWheelListener() { protected MouseWheelListener createMouseWheelListener() {
return new BasicScrollPaneUI.MouseWheelHandler() { MouseWheelListener superListener = super.createMouseWheelListener();
@Override return e -> {
public void mouseWheelMoved( MouseWheelEvent e ) { if( isSmoothScrollingEnabled() &&
if( isSmoothScrollingEnabled() && scrollpane.isWheelScrollingEnabled() &&
scrollpane.isWheelScrollingEnabled() && e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL &&
e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL && e.getPreciseWheelRotation() != 0 &&
e.getPreciseWheelRotation() != 0 && e.getPreciseWheelRotation() != e.getWheelRotation() )
e.getPreciseWheelRotation() != e.getWheelRotation() ) {
{ mouseWheelMovedSmooth( e );
mouseWheelMovedSmooth( e ); } else
} else superListener.mouseWheelMoved( e );
super.mouseWheelMoved( e );
}
}; };
} }
@@ -239,41 +237,39 @@ public class FlatScrollPaneUI
@Override @Override
protected PropertyChangeListener createPropertyChangeListener() { protected PropertyChangeListener createPropertyChangeListener() {
return new BasicScrollPaneUI.PropertyChangeHandler() { PropertyChangeListener superListener = super.createPropertyChangeListener();
@Override return e -> {
public void propertyChange( PropertyChangeEvent e ) { superListener.propertyChange( e );
super.propertyChange( e );
switch( e.getPropertyName() ) { switch( e.getPropertyName() ) {
case FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS: case FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS:
JScrollBar vsb = scrollpane.getVerticalScrollBar(); JScrollBar vsb = scrollpane.getVerticalScrollBar();
JScrollBar hsb = scrollpane.getHorizontalScrollBar(); JScrollBar hsb = scrollpane.getHorizontalScrollBar();
if( vsb != null ) { if( vsb != null ) {
vsb.revalidate(); vsb.revalidate();
vsb.repaint(); vsb.repaint();
} }
if( hsb != null ) { if( hsb != null ) {
hsb.revalidate(); hsb.revalidate();
hsb.repaint(); hsb.repaint();
} }
break;
case ScrollPaneConstants.LOWER_LEFT_CORNER:
case ScrollPaneConstants.LOWER_RIGHT_CORNER:
case ScrollPaneConstants.UPPER_LEFT_CORNER:
case ScrollPaneConstants.UPPER_RIGHT_CORNER:
// remove border from buttons added to corners
Object corner = e.getNewValue();
if( corner instanceof JButton &&
((JButton)corner).getBorder() instanceof FlatButtonBorder &&
scrollpane.getViewport() != null &&
scrollpane.getViewport().getView() instanceof JTable )
{
((JButton)corner).setBorder( BorderFactory.createEmptyBorder() );
((JButton)corner).setFocusable( false );
}
break; break;
}
case ScrollPaneConstants.LOWER_LEFT_CORNER:
case ScrollPaneConstants.LOWER_RIGHT_CORNER:
case ScrollPaneConstants.UPPER_LEFT_CORNER:
case ScrollPaneConstants.UPPER_RIGHT_CORNER:
// remove border from buttons added to corners
Object corner = e.getNewValue();
if( corner instanceof JButton &&
((JButton)corner).getBorder() instanceof FlatButtonBorder &&
scrollpane.getViewport() != null &&
scrollpane.getViewport().getView() instanceof JTable )
{
((JButton)corner).setBorder( BorderFactory.createEmptyBorder() );
((JButton)corner).setFocusable( false );
}
break;
} }
}; };
} }

View File

@@ -25,7 +25,6 @@ import java.awt.Insets;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import javax.swing.CellRendererPane; import javax.swing.CellRendererPane;
import javax.swing.Icon; import javax.swing.Icon;
@@ -193,40 +192,38 @@ public class FlatTreeUI
@Override @Override
protected PropertyChangeListener createPropertyChangeListener() { protected PropertyChangeListener createPropertyChangeListener() {
return new BasicTreeUI.PropertyChangeHandler() { PropertyChangeListener superListener = super.createPropertyChangeListener();
@Override return e -> {
public void propertyChange( PropertyChangeEvent e ) { superListener.propertyChange( e );
super.propertyChange( e );
if( e.getSource() == tree ) { if( e.getSource() == tree ) {
switch( e.getPropertyName() ) { switch( e.getPropertyName() ) {
case TREE_WIDE_SELECTION: case TREE_WIDE_SELECTION:
case TREE_PAINT_SELECTION: case TREE_PAINT_SELECTION:
tree.repaint(); tree.repaint();
break; break;
case "dropLocation": case "dropLocation":
if( isWideSelection() ) { if( isWideSelection() ) {
JTree.DropLocation oldValue = (JTree.DropLocation) e.getOldValue(); JTree.DropLocation oldValue = (JTree.DropLocation) e.getOldValue();
repaintWideDropLocation( oldValue ); repaintWideDropLocation( oldValue );
repaintWideDropLocation( tree.getDropLocation() ); repaintWideDropLocation( tree.getDropLocation() );
} }
break; break;
}
} }
} }
private void repaintWideDropLocation(JTree.DropLocation loc) {
if( loc == null || isDropLine( loc ) )
return;
Rectangle r = tree.getPathBounds( loc.getPath() );
if( r != null )
tree.repaint( 0, r.y, tree.getWidth(), r.height );
}
}; };
} }
private void repaintWideDropLocation(JTree.DropLocation loc) {
if( loc == null || isDropLine( loc ) )
return;
Rectangle r = tree.getPathBounds( loc.getPath() );
if( r != null )
tree.repaint( 0, r.y, tree.getWidth(), r.height );
}
/** /**
* Same as super.paintRow(), but supports wide selection and uses * Same as super.paintRow(), but supports wide selection and uses
* inactive selection background/foreground if tree is not focused. * inactive selection background/foreground if tree is not focused.

View File

@@ -32,7 +32,6 @@ import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener; import java.awt.event.MouseMotionListener;
import java.awt.geom.Path2D; import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.UIManager; import javax.swing.UIManager;
@@ -111,19 +110,17 @@ public class FlatJideTabbedPaneUI
@Override @Override
protected PropertyChangeListener createPropertyChangeListener() { protected PropertyChangeListener createPropertyChangeListener() {
return new PropertyChangeHandler() { PropertyChangeListener superListener = super.createPropertyChangeListener();
@Override return e -> {
public void propertyChange( PropertyChangeEvent e ) { superListener.propertyChange( e );
super.propertyChange( e );
String propertyName = e.getPropertyName(); String propertyName = e.getPropertyName();
if( JideTabbedPane.PROPERTY_SELECTED_INDEX.equals( propertyName ) ) { if( JideTabbedPane.PROPERTY_SELECTED_INDEX.equals( propertyName ) ) {
repaintTab( (Integer) e.getOldValue() ); repaintTab( (Integer) e.getOldValue() );
repaintTab( (Integer) e.getNewValue() ); repaintTab( (Integer) e.getNewValue() );
} else if( FlatClientProperties.TABBED_PANE_HAS_FULL_BORDER.equals( propertyName ) ) { } else if( FlatClientProperties.TABBED_PANE_HAS_FULL_BORDER.equals( propertyName ) ) {
_tabPane.revalidate(); _tabPane.revalidate();
_tabPane.repaint(); _tabPane.repaint();
}
} }
}; };
} }