|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package javax.swing.plaf.metal; |
|
|
|
import java.awt.*; |
|
import java.awt.event.*; |
|
import javax.swing.*; |
|
import javax.swing.border.*; |
|
import javax.swing.plaf.*; |
|
import java.beans.*; |
|
import java.util.EventListener; |
|
import java.io.Serializable; |
|
import javax.swing.plaf.basic.BasicDesktopIconUI; |
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public class MetalDesktopIconUI extends BasicDesktopIconUI |
|
{ |
|
|
|
JButton button; |
|
JLabel label; |
|
TitleListener titleListener; |
|
private int width; |
|
|
|
public static ComponentUI createUI(JComponent c) { |
|
return new MetalDesktopIconUI(); |
|
} |
|
|
|
public MetalDesktopIconUI() { |
|
} |
|
|
|
protected void installDefaults() { |
|
super.installDefaults(); |
|
LookAndFeel.installColorsAndFont(desktopIcon, "DesktopIcon.background", "DesktopIcon.foreground", "DesktopIcon.font"); |
|
width = UIManager.getInt("DesktopIcon.width"); |
|
} |
|
|
|
protected void installComponents() { |
|
frame = desktopIcon.getInternalFrame(); |
|
Icon icon = frame.getFrameIcon(); |
|
String title = frame.getTitle(); |
|
|
|
button = new JButton (title, icon); |
|
button.addActionListener( new ActionListener() { |
|
public void actionPerformed(ActionEvent e) { |
|
deiconize(); }} ); |
|
button.setFont(desktopIcon.getFont()); |
|
button.setBackground(desktopIcon.getBackground()); |
|
button.setForeground(desktopIcon.getForeground()); |
|
|
|
int buttonH = button.getPreferredSize().height; |
|
|
|
Icon drag = new MetalBumps((buttonH/3), buttonH, |
|
MetalLookAndFeel.getControlHighlight(), |
|
MetalLookAndFeel.getControlDarkShadow(), |
|
MetalLookAndFeel.getControl()); |
|
label = new JLabel(drag); |
|
|
|
label.setBorder( new MatteBorder( 0, 2, 0, 1, desktopIcon.getBackground()) ); |
|
desktopIcon.setLayout(new BorderLayout(2, 0)); |
|
desktopIcon.add(button, BorderLayout.CENTER); |
|
desktopIcon.add(label, BorderLayout.WEST); |
|
} |
|
|
|
protected void uninstallComponents() { |
|
desktopIcon.setLayout(null); |
|
desktopIcon.remove(label); |
|
desktopIcon.remove(button); |
|
button = null; |
|
frame = null; |
|
} |
|
|
|
protected void installListeners() { |
|
super.installListeners(); |
|
desktopIcon.getInternalFrame().addPropertyChangeListener( |
|
titleListener = new TitleListener()); |
|
} |
|
|
|
protected void uninstallListeners() { |
|
desktopIcon.getInternalFrame().removePropertyChangeListener( |
|
titleListener); |
|
titleListener = null; |
|
super.uninstallListeners(); |
|
} |
|
|
|
|
|
public Dimension getPreferredSize(JComponent c) { |
|
// Metal desktop icons can not be resized. Their dimensions should |
|
|
|
return getMinimumSize(c); |
|
} |
|
|
|
public Dimension getMinimumSize(JComponent c) { |
|
// For the metal desktop icon we will use the layout maanger to |
|
// determine the correct height of the component, but we want to keep |
|
|
|
return new Dimension(width, |
|
desktopIcon.getLayout().minimumLayoutSize(desktopIcon).height); |
|
} |
|
|
|
public Dimension getMaximumSize(JComponent c) { |
|
// Metal desktop icons can not be resized. Their dimensions should |
|
|
|
return getMinimumSize(c); |
|
} |
|
|
|
class TitleListener implements PropertyChangeListener { |
|
public void propertyChange (PropertyChangeEvent e) { |
|
if (e.getPropertyName().equals("title")) { |
|
button.setText((String)e.getNewValue()); |
|
} |
|
|
|
if (e.getPropertyName().equals("frameIcon")) { |
|
button.setIcon((Icon)e.getNewValue()); |
|
} |
|
} |
|
} |
|
} |