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