diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java index c20fa4f8..ce6e2a06 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java @@ -19,15 +19,12 @@ package com.formdev.flatlaf.ui; import static com.formdev.flatlaf.util.UIScale.scale; import java.awt.Dimension; import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.JComponent; import javax.swing.LookAndFeel; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicPasswordFieldUI; -import javax.swing.text.JTextComponent; import com.formdev.flatlaf.util.SystemInfo; /** @@ -46,7 +43,7 @@ public class FlatPasswordFieldUI protected int focusWidth; protected int minimumWidth; - private Handler handler; + private FocusListener focusListener; public static ComponentUI createUI( JComponent c ) { return new FlatPasswordFieldUI(); @@ -77,41 +74,21 @@ public class FlatPasswordFieldUI protected void installListeners() { super.installListeners(); - getComponent().addFocusListener( getHandler() ); + focusListener = new FlatUIUtils.RepaintFocusListener( getComponent() ); + getComponent().addFocusListener( focusListener ); } @Override protected void uninstallListeners() { super.uninstallListeners(); - getComponent().removeFocusListener( getHandler() ); - - handler = null; - } - - public Handler getHandler() { - if( handler == null ) - handler = new Handler(); - return handler; + getComponent().removeFocusListener( focusListener ); + focusListener = null; } @Override protected void paintBackground( Graphics g ) { - JTextComponent c = getComponent(); - - FlatUIUtils.paintParentBackground( g, c ); - - Graphics2D g2 = (Graphics2D) g.create(); - try { - FlatUIUtils.setRenderingHints( g2 ); - - float focusWidth = (c.getBorder() instanceof FlatBorder) ? scale( (float) this.focusWidth ) : 0; - - g2.setColor( c.getBackground() ); - FlatUIUtils.fillRoundRectangle( g2, 0, 0, c.getWidth(), c.getHeight(), focusWidth, 0 ); - } finally { - g2.dispose(); - } + FlatTextFieldUI.paintBackground( g, getComponent(), focusWidth ); } @Override @@ -129,20 +106,4 @@ public class FlatPasswordFieldUI size.width = Math.max( size.width, scale( minimumWidth + (focusWidth * 2) ) ); return size; } - - //---- class Handler ------------------------------------------------------ - - private class Handler - implements FocusListener - { - @Override - public void focusGained( FocusEvent e ) { - getComponent().repaint(); - } - - @Override - public void focusLost( FocusEvent e ) { - getComponent().repaint(); - } - } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java index 6df6a556..cb6ce1a5 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java @@ -21,7 +21,6 @@ import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; -import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.JComboBox; import javax.swing.JComponent; @@ -47,7 +46,7 @@ public class FlatTextFieldUI protected int focusWidth; protected int minimumWidth; - private Handler handler; + private FocusListener focusListener; public static ComponentUI createUI( JComponent c ) { return new FlatTextFieldUI(); @@ -74,38 +73,34 @@ public class FlatTextFieldUI protected void installListeners() { super.installListeners(); - getComponent().addFocusListener( getHandler() ); + focusListener = new FlatUIUtils.RepaintFocusListener( getComponent() ); + getComponent().addFocusListener( focusListener ); } @Override protected void uninstallListeners() { super.uninstallListeners(); - getComponent().removeFocusListener( getHandler() ); - - handler = null; - } - - public Handler getHandler() { - if( handler == null ) - handler = new Handler(); - return handler; + getComponent().removeFocusListener( focusListener ); + focusListener = null; } @Override protected void paintBackground( Graphics g ) { - JTextComponent c = getComponent(); + paintBackground( g, getComponent(), focusWidth ); + } + static void paintBackground( Graphics g, JTextComponent c, int focusWidth ) { FlatUIUtils.paintParentBackground( g, c ); Graphics2D g2 = (Graphics2D) g.create(); try { FlatUIUtils.setRenderingHints( g2 ); - float focusWidth = (c.getBorder() instanceof FlatBorder) ? scale( (float) this.focusWidth ) : 0; + float fFocusWidth = (c.getBorder() instanceof FlatBorder) ? scale( (float) focusWidth ) : 0; g2.setColor( c.getBackground() ); - FlatUIUtils.fillRoundRectangle( g2, 0, 0, c.getWidth(), c.getHeight(), focusWidth, 0 ); + FlatUIUtils.fillRoundRectangle( g2, 0, 0, c.getWidth(), c.getHeight(), fFocusWidth, 0 ); } finally { g2.dispose(); } @@ -132,20 +127,4 @@ public class FlatTextFieldUI size.width = Math.max( size.width, scale( minimumWidth + (focusWidth * 2) ) ); return size; } - - //---- class Handler ------------------------------------------------------ - - private class Handler - implements FocusListener - { - @Override - public void focusGained( FocusEvent e ) { - getComponent().repaint(); - } - - @Override - public void focusLost( FocusEvent e ) { - getComponent().repaint(); - } - } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java index b65248ef..541f4839 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java @@ -26,6 +26,8 @@ import java.awt.Insets; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.Shape; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.geom.Path2D; @@ -251,10 +253,10 @@ public class FlatUIUtils public static class HoverListener extends MouseAdapter { - private final JComponent repaintComponent; + private final Component repaintComponent; private final Consumer hoverChanged; - public HoverListener( JComponent repaintComponent, Consumer hoverChanged ) { + public HoverListener( Component repaintComponent, Consumer hoverChanged ) { this.repaintComponent = repaintComponent; this.hoverChanged = hoverChanged; } @@ -276,4 +278,26 @@ public class FlatUIUtils repaintComponent.repaint(); } } + + //---- class RepaintFocusListener ----------------------------------------- + + public static class RepaintFocusListener + implements FocusListener + { + private final Component repaintComponent; + + public RepaintFocusListener( Component repaintComponent ) { + this.repaintComponent = repaintComponent; + } + + @Override + public void focusGained( FocusEvent e ) { + repaintComponent.repaint(); + } + + @Override + public void focusLost( FocusEvent e ) { + repaintComponent.repaint(); + } + } } diff --git a/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatDatePickerUI.java b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatDatePickerUI.java index 6fba8db8..2b48c48e 100644 --- a/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatDatePickerUI.java +++ b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatDatePickerUI.java @@ -28,8 +28,6 @@ import java.awt.Insets; import java.awt.LayoutManager; import java.awt.Rectangle; import java.awt.Shape; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; import java.awt.geom.Rectangle2D; import java.text.ParseException; import java.util.Calendar; @@ -159,18 +157,7 @@ public class FlatDatePickerUI editor.setName( "dateField" ); editor.setBorder( BorderFactory.createEmptyBorder() ); editor.setOpaque( false ); - editor.addFocusListener( new FocusListener() { - @Override - public void focusLost( FocusEvent e ) { - if( datePicker != null ) - datePicker.repaint(); - } - @Override - public void focusGained( FocusEvent e ) { - if( datePicker != null ) - datePicker.repaint(); - } - } ); + editor.addFocusListener( new FlatUIUtils.RepaintFocusListener( datePicker ) ); return editor; }