1. /*
  2. * @(#)MetalDesktopIconUI.java 1.13 01/11/29
  3. *
  4. * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package javax.swing.plaf.metal;
  8. import java.awt.*;
  9. import java.awt.event.*;
  10. import javax.swing.*;
  11. import javax.swing.border.*;
  12. import javax.swing.plaf.*;
  13. import java.beans.*;
  14. import java.util.EventListener;
  15. import java.io.Serializable;
  16. import javax.swing.plaf.basic.BasicDesktopIconUI;
  17. /**
  18. * Metal desktop icon.
  19. *
  20. * @version 1.13 11/29/01
  21. * @author Steve Wilson
  22. */
  23. public class MetalDesktopIconUI extends BasicDesktopIconUI
  24. {
  25. JButton button;
  26. JLabel label;
  27. TitleListener titleListener;
  28. public static ComponentUI createUI(JComponent c) {
  29. return new MetalDesktopIconUI();
  30. }
  31. public MetalDesktopIconUI() {
  32. }
  33. protected void installDefaults() {
  34. super.installDefaults();
  35. LookAndFeel.installColorsAndFont(desktopIcon, "DesktopIcon.background", "DesktopIcon.foreground", "DesktopIcon.font");
  36. desktopIcon.setOpaque(true);
  37. }
  38. protected void installComponents() {
  39. JInternalFrame frame = desktopIcon.getInternalFrame();
  40. Icon icon = frame.getFrameIcon();
  41. String title = frame.getTitle();
  42. button = new JButton (title, icon);
  43. button.addActionListener( new ActionListener() {
  44. public void actionPerformed(ActionEvent e) { deiconize(); }} );
  45. button.setFont(desktopIcon.getFont());
  46. button.setBackground(desktopIcon.getBackground());
  47. button.setForeground(desktopIcon.getForeground());
  48. int buttonH = button.getPreferredSize().height;
  49. Icon drag = new MetalBumps((buttonH3), buttonH,
  50. MetalLookAndFeel.getControlHighlight(),
  51. MetalLookAndFeel.getControlDarkShadow(),
  52. MetalLookAndFeel.getControl());
  53. label = new JLabel(drag);
  54. label.setBorder( new MatteBorder( 0, 2, 0, 1, desktopIcon.getBackground()) );
  55. desktopIcon.setLayout(new BorderLayout(2, 0));
  56. desktopIcon.add(button, BorderLayout.CENTER);
  57. desktopIcon.add(label, BorderLayout.WEST);
  58. desktopIcon.getInternalFrame().addPropertyChangeListener( titleListener = new TitleListener() );
  59. }
  60. protected void uninstallComponents() {
  61. desktopIcon.setLayout(null);
  62. desktopIcon.remove(label);
  63. desktopIcon.remove(button);
  64. desktopIcon.getInternalFrame().removePropertyChangeListener(titleListener);
  65. }
  66. public Dimension getPreferredSize(JComponent c) {
  67. return null;
  68. }
  69. class TitleListener implements PropertyChangeListener {
  70. public void propertyChange (PropertyChangeEvent e) {
  71. if (e.getPropertyName().equals("title")) {
  72. button.setText((String)e.getNewValue());
  73. }
  74. if (e.getPropertyName().equals("frameIcon")) {
  75. button.setIcon((Icon)e.getNewValue());
  76. }
  77. }
  78. }
  79. }