Java tutorial
/* * Copyright 2004 - 2008 Christian Sprajc. All rights reserved. * * This file is part of PowerFolder. * * PowerFolder is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation. * * PowerFolder is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PowerFolder. If not, see <http://www.gnu.org/licenses/>. * * $Id: JButtonMini.java 5009 2008-08-11 01:25:22Z tot $ */ package de.dal33t.powerfolder.ui.widget; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.Action; import javax.swing.Icon; import javax.swing.JButton; import com.jgoodies.forms.factories.Borders; import de.dal33t.powerfolder.event.WeakActionListener; import de.dal33t.powerfolder.event.WeakPropertyChangeListener; import de.dal33t.powerfolder.ui.util.CursorUtils; /** * Class showing image button with no border, except when hover or pressed. Uses * Synthetica features to do border. */ public class JButtonMini extends JButton { private MyActionListener actionListener; private MyPropertyChangeListener propChangeListener; /** * Mini button that is bound to a an action * * @param action */ public JButtonMini(final Action action) { this((Icon) action.getValue(Action.SMALL_ICON), (String) action.getValue(Action.SHORT_DESCRIPTION)); CursorUtils.setHandCursor(this); actionListener = new MyActionListener(action); addActionListener(new WeakActionListener(actionListener, this)); propChangeListener = new MyPropertyChangeListener(action); action.addPropertyChangeListener(new WeakPropertyChangeListener(propChangeListener, action)); setEnabled(action.isEnabled()); } public JButtonMini(Icon icon, String toolTipText) { if (icon == null) { setText("???"); } else { setIcon(icon); } setOpaque(true); setBorder(null); setBorder(Borders.createEmptyBorder("0dlu, 0dlu, 0dlu, 0dlu")); setMargin(new Insets(0, 0, 0, 0)); setBorderPainted(false); if (toolTipText != null && toolTipText.trim().length() > 0) { setToolTipText(toolTipText); } } public void configureFromAction(Action action) { Object value = action.getValue(Action.SMALL_ICON); if (value != null && value instanceof Icon) { Icon icon = (Icon) value; setIcon(icon); } value = action.getValue(Action.SHORT_DESCRIPTION); if (value != null && value instanceof String) { String text = (String) value; setToolTipText(text); } } private final class MyPropertyChangeListener implements PropertyChangeListener { private final Action action; private MyPropertyChangeListener(Action action) { this.action = action; } public void propertyChange(PropertyChangeEvent evt) { setEnabled(action.isEnabled()); } } private final class MyActionListener implements ActionListener { private final Action action; private MyActionListener(Action action) { this.action = action; } public void actionPerformed(ActionEvent e) { action.actionPerformed(e); } } }