package org.openflexo.swing;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.openflexo.icon.UtilsIconLibrary;
import org.openflexo.toolbox.ToolBox;
public class BarButton extends JButton {
private boolean internallySelected = false;
private Color defaultBackgroundColor;
public BarButton(Action a) {
this();
setAction(a);
}
public BarButton(Icon icon) {
this(null, icon);
}
public BarButton(String text, Icon icon) {
super(text, icon);
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if (isEnabled()) {
setContentAreaFilled(true);
}
}
@Override
public void mouseExited(MouseEvent e) {
setContentAreaFilled(false);
}
});
updateInternalUI();
}
@Override
public void updateUI() {
super.updateUI();
updateInternalUI();
}
private void updateInternalUI() {
setEnabled(true);
setBorderPainted(false);
setRolloverEnabled(true);
setContentAreaFilled(false);
setOpaque(false);
defaultBackgroundColor = getBackground();
}
public BarButton(String text) {
this(text, null);
}
public BarButton() {
this(null, null);
}
@Override
public void setContentAreaFilled(boolean b) {
b |= internallySelected;
super.setContentAreaFilled(b);
setOpaque(b);
}
@Override
public void setSelected(boolean b) {
internallySelected = b;
if (ToolBox.isMacOSLaf()) {
if (b) {
setBackground(defaultBackgroundColor.darker());
} else {
setBackground(defaultBackgroundColor);
}
} else {
super.setSelected(b);
}
setContentAreaFilled(b);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
JMenuBar panel = new JMenuBar();
panel.setBackground(UIManager.getDefaults().getColor("ToolBar.floatingForeground"));
frame.add(panel);
for (int i = 0; i < 10; i++) {
BarButton bar = new BarButton(UtilsIconLibrary.UK_FLAG);
bar.setSelected(i == 1);
panel.add(bar);
}
frame.pack();
frame.setVisible(true);
}
});
}
}