From 789dcd05b3f2f6d3c3587ac905cf52a5e014ca1e Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Sat, 30 Mar 2019 00:10:13 +0100 Subject: [PATCH] Fixed some issue - Issue fixed https://github.com/atarw/material-ui-swing/issues/73 - issue fixed https://github.com/atarw/material-ui-swing/issues/77 - fixed error pint the graphics in some component - Create a component MaterialManagerListner for manager a listener for not duplicate code --- src/main/java/mdlaf/MaterialLookAndFeel.java | 4 +- .../components/button/MaterialButtonUI.java | 63 ++++++++++++------- .../combobox/MaterialComboBoxUI.java | 10 ++- .../password/MaterialPasswordFieldUI.java | 3 + .../scrollbar/MaterialScrollBarUI.java | 12 +++- .../components/slider/MaterialSliderUI.java | 9 ++- .../components/spinner/MaterialSpinnerUI.java | 14 ++--- .../textfield/MaterialTextFieldUI.java | 3 + .../mdlaf/utils/MaterialManagerListener.java | 23 +++++++ 9 files changed, 103 insertions(+), 38 deletions(-) create mode 100644 src/main/java/mdlaf/utils/MaterialManagerListener.java diff --git a/src/main/java/mdlaf/MaterialLookAndFeel.java b/src/main/java/mdlaf/MaterialLookAndFeel.java index 96b92d1..d5b0701 100644 --- a/src/main/java/mdlaf/MaterialLookAndFeel.java +++ b/src/main/java/mdlaf/MaterialLookAndFeel.java @@ -233,7 +233,9 @@ protected void initComponentDefaults (UIDefaults table) { table.put ("ScrollBar.thumbHighlight", MaterialColors.GRAY_300); table.put ("ScrollBar.thumbShadow", MaterialColors.GRAY_300); table.put ("ScrollBar.arrowButtonBackground", MaterialColors.GRAY_300); - table.put ("ScrollBar.arrowButtonBorder", BorderFactory.createEmptyBorder ()); + table.put("ScrollBar.arrowButtonBorder", MaterialBorders.LIGHT_LINE_BORDER); + table.put("ScrollBar[MouseHover].enable", true); + table.put("ScrollBar[MouseHover].color", MaterialColors.GRAY_400); table.put ("ScrollPane.background", Color.WHITE); table.put ("ScrollPane.border", BorderFactory.createEmptyBorder ()); diff --git a/src/main/java/mdlaf/components/button/MaterialButtonUI.java b/src/main/java/mdlaf/components/button/MaterialButtonUI.java index 1e0fbb3..09856c8 100644 --- a/src/main/java/mdlaf/components/button/MaterialButtonUI.java +++ b/src/main/java/mdlaf/components/button/MaterialButtonUI.java @@ -2,7 +2,6 @@ import mdlaf.animation.MaterialUIMovement; import mdlaf.utils.MaterialDrawingUtils; - import javax.swing.AbstractButton; import javax.swing.JComponent; import javax.swing.UIManager; @@ -10,44 +9,60 @@ import javax.swing.plaf.basic.BasicButtonUI; import java.awt.*; +/** + * @contributor https://github.com/vincenzopalazzo + */ + public class MaterialButtonUI extends BasicButtonUI { - public static ComponentUI createUI (final JComponent c) { - return new MaterialButtonUI (); + public static ComponentUI createUI(final JComponent c) { + return new MaterialButtonUI(); } @Override - public void installUI (JComponent c) { - super.installUI (c); + public void installUI(JComponent c) { + super.installUI(c); AbstractButton button = (AbstractButton) c; - button.setOpaque (UIManager.getBoolean ("Button.opaque")); - button.setBorder (UIManager.getBorder ("Button.border")); - button.setBackground (UIManager.getColor ("Button.background")); - button.setForeground (UIManager.getColor ("Button.foreground")); - button.setFont (UIManager.getFont ("Button.font")); - if(UIManager.getBoolean("Button.mouseHoverEnable")){ - button.addMouseListener(MaterialUIMovement.getMovement(button, UIManager.getColor("Button.mouseHoverColor"))); - } + button.setOpaque(UIManager.getBoolean("Button.opaque")); + button.setBorder(UIManager.getBorder("Button.border")); + button.setBackground(UIManager.getColor("Button.background")); + button.setForeground(UIManager.getColor("Button.foreground")); + button.setFont(UIManager.getFont("Button.font")); button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + button.addMouseListener(MaterialUIMovement.getMovement(button, UIManager.getColor("Button.mouseHoverColor"))); } @Override - public void paint (Graphics g, JComponent c) { + public void paint(Graphics g, JComponent c) { AbstractButton b = (AbstractButton) c; - g = MaterialDrawingUtils.getAliasedGraphics (g); - - if (b.isContentAreaFilled ()) { - paintBackground (MaterialDrawingUtils.getAliasedGraphics(g), b); + g = MaterialDrawingUtils.getAliasedGraphics(g); + if (b.isContentAreaFilled()) { + paintBackground(MaterialDrawingUtils.getAliasedGraphics(g), b); } + super.paint(MaterialDrawingUtils.getAliasedGraphics(g), c); + } + //Fix to #73 border were pixeled, fixde by https://github.com/vincenzopalazzo + private void paintBackground(Graphics g, JComponent c) { + //g.setColor(c.getBackground()); + //g.fillRoundRect(0, 0, c.getWidth(), c.getHeight(), 7, 7); + Graphics2D graphics2D = (Graphics2D) g; + graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g = graphics2D; + g.setColor(c.getBackground()); + g.fillRoundRect(0, 0, c.getWidth(), c.getHeight(), 7, 7); + } - super.paint (MaterialDrawingUtils.getAliasedGraphics(g), c); + @Override + protected void paintButtonPressed(Graphics g, AbstractButton b) { + super.paintButtonPressed(g, b); } - private void paintBackground (Graphics g, JComponent c) { - g = MaterialDrawingUtils.getAliasedGraphics(g); - g.setColor (c.getBackground ()); - g.fillRect (0, 0, c.getWidth (), c.getHeight()); + @Override + public void update(Graphics g, JComponent c) { + super.update(g, c); + c.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } -} + +} \ No newline at end of file diff --git a/src/main/java/mdlaf/components/combobox/MaterialComboBoxUI.java b/src/main/java/mdlaf/components/combobox/MaterialComboBoxUI.java index d93cf66..d37cb48 100644 --- a/src/main/java/mdlaf/components/combobox/MaterialComboBoxUI.java +++ b/src/main/java/mdlaf/components/combobox/MaterialComboBoxUI.java @@ -3,8 +3,7 @@ import mdlaf.animation.MaterialUIMovement; import mdlaf.utils.MaterialBorders; import mdlaf.utils.MaterialDrawingUtils; - -import javax.swing.BorderFactory; +import mdlaf.utils.MaterialManagerListener; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JComboBox; @@ -14,8 +13,12 @@ import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicArrowButton; import javax.swing.plaf.basic.BasicComboBoxUI; -import java.awt.*; +import java.awt.Cursor; +import java.awt.Graphics; +/** + * @contributor https://github.com/vincenzopalazzo + */ public class MaterialComboBoxUI extends BasicComboBoxUI { public static ComponentUI createUI (JComponent c) { @@ -46,6 +49,7 @@ protected JButton createArrowButton () { else { button = new BasicArrowButton (SwingConstants.SOUTH); } + MaterialManagerListener.removeAllMouseListener(button); button.setOpaque (true); button.setBackground (UIManager.getColor ("ComboBox.buttonBackground")); if(UIManager.getBoolean("ComboBox.mouseHoverEnabled")){ diff --git a/src/main/java/mdlaf/components/password/MaterialPasswordFieldUI.java b/src/main/java/mdlaf/components/password/MaterialPasswordFieldUI.java index 8239aad..f88572f 100644 --- a/src/main/java/mdlaf/components/password/MaterialPasswordFieldUI.java +++ b/src/main/java/mdlaf/components/password/MaterialPasswordFieldUI.java @@ -27,6 +27,9 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +/** + * @contributor https://github.com/vincenzopalazzo + */ public class MaterialPasswordFieldUI extends BasicPasswordFieldUI implements FocusListener, PropertyChangeListener { private Color focusedBackground; diff --git a/src/main/java/mdlaf/components/scrollbar/MaterialScrollBarUI.java b/src/main/java/mdlaf/components/scrollbar/MaterialScrollBarUI.java index 1677a71..743a5c9 100644 --- a/src/main/java/mdlaf/components/scrollbar/MaterialScrollBarUI.java +++ b/src/main/java/mdlaf/components/scrollbar/MaterialScrollBarUI.java @@ -1,6 +1,8 @@ package mdlaf.components.scrollbar; +import mdlaf.animation.MaterialUIMovement; import mdlaf.utils.MaterialDrawingUtils; +import mdlaf.utils.MaterialManagerListener; import javax.swing.JButton; import javax.swing.JComponent; @@ -43,10 +45,13 @@ public void paint (Graphics g, JComponent c) { protected JButton createDecreaseButton (int orientation) { JButton button = new BasicArrowButton (orientation); + MaterialManagerListener.removeAllMouseListener(button); button.setOpaque (true); button.setBackground (UIManager.getColor ("ScrollBar.arrowButtonBackground")); button.setBorder (UIManager.getBorder ("ScrollBar.arrowButtonBorder")); - + if(UIManager.getBoolean("ScrollBar[MouseHover].enable")){ + button.addMouseListener(MaterialUIMovement.getMovement(button, UIManager.getColor("ScrollBar[MouseHover].color"))); + } return button; } @@ -54,10 +59,13 @@ protected JButton createDecreaseButton (int orientation) { protected JButton createIncreaseButton (int orientation) { JButton button = new BasicArrowButton (orientation); + MaterialManagerListener.removeAllMouseListener(button); button.setOpaque (true); button.setBackground (UIManager.getColor ("ScrollBar.arrowButtonBackground")); button.setBorder (UIManager.getBorder ("ScrollBar.arrowButtonBorder")); - + if(UIManager.getBoolean("ScrollBar[MouseHover].enable")){ + button.addMouseListener(MaterialUIMovement.getMovement(button, UIManager.getColor("ScrollBar[MouseHover].color"))); + } return button; } } \ No newline at end of file diff --git a/src/main/java/mdlaf/components/slider/MaterialSliderUI.java b/src/main/java/mdlaf/components/slider/MaterialSliderUI.java index 756b2ea..77188ee 100644 --- a/src/main/java/mdlaf/components/slider/MaterialSliderUI.java +++ b/src/main/java/mdlaf/components/slider/MaterialSliderUI.java @@ -10,7 +10,9 @@ import javax.swing.plaf.basic.BasicSliderUI; import java.awt.*; -//TODO cambio grafica slider +/** + * @contributor https://github.com/vincenzopalazzo + */ public class MaterialSliderUI extends BasicSliderUI { private static final int NORMAL_THUMB_RADIUS = 7; @@ -25,7 +27,12 @@ public static ComponentUI createUI (JComponent c) { return new MaterialSliderUI ((JSlider) c); } + // I fixig paint the circle bacuse this was painted wrong + // @contributor https://github.com/vincenzopalazzo private static void drawCircle (Graphics g, int x, int y, int radius) { + Graphics2D graphics2D = (Graphics2D) g; + graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g = graphics2D; g.fillOval (x - radius, y - radius, radius * 2, radius * 2); } diff --git a/src/main/java/mdlaf/components/spinner/MaterialSpinnerUI.java b/src/main/java/mdlaf/components/spinner/MaterialSpinnerUI.java index 647ebb3..8915df5 100644 --- a/src/main/java/mdlaf/components/spinner/MaterialSpinnerUI.java +++ b/src/main/java/mdlaf/components/spinner/MaterialSpinnerUI.java @@ -1,21 +1,19 @@ package mdlaf.components.spinner; import mdlaf.animation.MaterialUIMovement; -import mdlaf.components.textfield.MaterialTextFieldUI; -import mdlaf.components.textpane.MaterialTextPaneUI; import mdlaf.utils.MaterialBorders; import mdlaf.utils.MaterialDrawingUtils; -import org.jdesktop.swingx.JXTextField; - +import mdlaf.utils.MaterialManagerListener; import javax.swing.*; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicArrowButton; import javax.swing.plaf.basic.BasicSpinnerUI; -import javax.swing.plaf.basic.BasicTextFieldUI; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; + +/** + * @contributor https://github.com/vincenzopalazzo + */ public class MaterialSpinnerUI extends BasicSpinnerUI { @@ -58,6 +56,7 @@ protected Component createNextButton() { } else { button = new BasicArrowButton(SwingConstants.NORTH); } + MaterialManagerListener.removeAllMouseListener(button); button.setOpaque(true); button.setBackground(UIManager.getColor("Spinner.arrowButtonBackground")); button.setBorder(UIManager.getBorder("Spinner.arrowButtonBorder")); @@ -78,6 +77,7 @@ protected Component createPreviousButton() { } else { button = new BasicArrowButton(SwingConstants.SOUTH); } + MaterialManagerListener.removeAllMouseListener(button); button.setOpaque(true); button.setBackground(UIManager.getColor("Spinner.arrowButtonBackground")); button.setBorder(UIManager.getBorder("Spinner.arrowButtonBorder")); diff --git a/src/main/java/mdlaf/components/textfield/MaterialTextFieldUI.java b/src/main/java/mdlaf/components/textfield/MaterialTextFieldUI.java index 6864a07..97ad710 100644 --- a/src/main/java/mdlaf/components/textfield/MaterialTextFieldUI.java +++ b/src/main/java/mdlaf/components/textfield/MaterialTextFieldUI.java @@ -22,6 +22,9 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +/** + * @contributor https://github.com/vincenzopalazzo + */ public class MaterialTextFieldUI extends BasicTextFieldUI implements FocusListener, PropertyChangeListener { private boolean drawLine; diff --git a/src/main/java/mdlaf/utils/MaterialManagerListener.java b/src/main/java/mdlaf/utils/MaterialManagerListener.java new file mode 100644 index 0000000..e8dc56b --- /dev/null +++ b/src/main/java/mdlaf/utils/MaterialManagerListener.java @@ -0,0 +1,23 @@ +package mdlaf.utils; + +import javax.swing.*; +import java.awt.event.MouseListener; + +/** + * @author https://github.com/vincenzopalazzo + */ +public class MaterialManagerListener { + + /** + * Look this if you would change this function + * https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4380536 + */ + public static void removeAllMouseListener(JButton button){ + if(button == null){ + throw new IllegalArgumentException("Argument is null"); + } + for(MouseListener mouseListener : button.getListeners(MouseListener.class)){ + button.removeMouseListener(mouseListener); + } + } +}