package app.navigps.gui.buttons.ui; import app.navigps.utils.MetalUtils; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.event.MouseEvent; import javax.swing.AbstractButton; import javax.swing.ButtonModel; import javax.swing.JComponent; import javax.swing.UIManager; import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicButtonListener; import javax.swing.plaf.metal.MetalButtonUI; import sun.swing.SwingUtilities2; /** * Created on 2009-01-13, 00:00:31 * @author vara * Status (Testing) */ public class MyButtonUI extends MetalButtonUI{ /** * * @param b */ @Override public void installDefaults(AbstractButton b) { super.installDefaults(b); } /** * * @param b */ @Override public void uninstallDefaults(AbstractButton b) { super.uninstallDefaults(b); } // ******************************** // Create Listeners // ******************************** /** * * @param b * @return */ @Override protected BasicButtonListener createButtonListener(AbstractButton b) { return new MyBasicButtonListener(b); } // ******************************** // Default Accessors // ******************************** /** * * @return */ @Override protected Color getSelectColor() { selectColor = UIManager.getColor(getPropertyPrefix() + "select"); return selectColor; } /** * * @return */ @Override protected Color getDisabledTextColor() { disabledTextColor = UIManager.getColor(getPropertyPrefix() + "disabledText"); return disabledTextColor; } /** * * @return */ @Override protected Color getFocusColor() { focusColor = UIManager.getColor(getPropertyPrefix() + "focus"); return focusColor; } @Override public void update(Graphics g, JComponent c) { System.out.println("Update"); Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); AbstractButton button = (AbstractButton)c; if ((c.getBackground() instanceof UIResource) && button.isContentAreaFilled() && c.isEnabled()) { ButtonModel model = button.getModel(); if (!MetalUtils.isToolBarButton(c)) { if (!model.isArmed() && !model.isPressed() && MetalUtils.drawGradient(c, g2, "Button.gradient", 0, 0, c.getWidth(), c.getHeight(), true)) { paint(g2, c); return; } } else if (model.isRollover() && MetalUtils.drawGradient( c, g2, "Button.gradient", 0, 0, c.getWidth(), c.getHeight(), true)) { System.out.println("Tool bar button"); paint(g2, c); return; } } super.update(g, c); } /** * * @param g * @param b */ @Override protected void paintButtonPressed(Graphics g, AbstractButton b) { System.out.println("paintButtonPressed"); if ( b.isContentAreaFilled() ) { Dimension size = b.getSize(); g.setColor(getSelectColor()); g.fillRect(0, 0, size.width, size.height); } } /** * * @param g * @param b * @param viewRect * @param textRect * @param iconRect */ @Override protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, Rectangle textRect, Rectangle iconRect){ System.out.println("paintFocus"); Rectangle focusRect = new Rectangle(); String text = b.getText(); boolean isIcon = b.getIcon() != null; // If there is text if ( text != null && !text.equals( "" ) ) { if ( !isIcon ) { focusRect.setBounds( textRect ); } else { focusRect.setBounds( iconRect.union( textRect ) ); } } // If there is an icon and no text else if ( isIcon ) { focusRect.setBounds( iconRect ); } g.setColor(getFocusColor()); g.drawRect((focusRect.x-1), (focusRect.y-1), focusRect.width+1, focusRect.height+1); } @Override protected void paintText(Graphics g, JComponent c, Rectangle textRect, String text) { AbstractButton b = (AbstractButton) c; System.out.println("Paint Text"); Graphics2D g2 = (Graphics2D)g; ButtonModel model = b.getModel(); FontMetrics fm = SwingUtilities2.getFontMetrics(c, g); int mnemIndex = b.getDisplayedMnemonicIndex(); /* Draw the Text */ if(model.isEnabled()) { /*** paint the text normally */ g2.setColor(b.getForeground()); } else { /*** paint the text disabled ***/ g2.setColor(getDisabledTextColor()); } SwingUtilities2.drawStringUnderlineCharAt(c, g2,text,mnemIndex, textRect.x, textRect.y + fm.getAscent()); } class MyBasicButtonListener extends BasicButtonListener{ public MyBasicButtonListener(AbstractButton b) { super(b); } @Override public void mouseEntered(MouseEvent e) { super.mouseEntered(e); System.out.println("Mouse Entered"); } @Override public void mouseReleased(MouseEvent e) { super.mouseReleased(e); System.out.println("Mouse Relased"); } @Override public void mouseExited(MouseEvent e) { super.mouseExited(e); System.out.println("Mouse Exited"); } } }