Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6189120

Cant trivially extend OceanTheme

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P4 P4
    • 5.0
    • 5.0
    • client-libs

      FULL PRODUCT VERSION :
      java version "1.5.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
      Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows XP [Version 5.1.2600]

      A DESCRIPTION OF THE PROBLEM :
      Extending OceanTheme to override some of the default fonts causes the attached error.


      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Compile and run the test case.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Simple JFrame containing a default JTree.
      ACTUAL -
      See attached error message.

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      com.jdv.insight.client.TestCase$MyTheme/icons/ocean/expanded.gif not found.
      com.jdv.insight.client.TestCase$MyTheme/icons/ocean/collapsed.gif not found.
      com.jdv.insight.client.TestCase$MyTheme/icons/ocean/collapsed-rtl.gif not found.
      Exception in thread "main" java.lang.IllegalArgumentException: null delegate icon argument
      at javax.swing.plaf.IconUIResource.<init>(IconUIResource.java:49)
      at javax.swing.plaf.metal.OceanTheme$COIcon.<init>(OceanTheme.java:58)
      at javax.swing.plaf.metal.OceanTheme$6.createValue(OceanTheme.java:265)
      at javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:183)
      at javax.swing.UIDefaults.get(UIDefaults.java:128)
      at javax.swing.MultiUIDefaults.get(MultiUIDefaults.java:44)
      at javax.swing.UIManager.get(UIManager.java:818)
      at javax.swing.plaf.basic.BasicTreeUI.installDefaults(BasicTreeUI.java:686)
      at javax.swing.plaf.basic.BasicTreeUI.installUI(BasicTreeUI.java:616)
      at javax.swing.plaf.metal.MetalTreeUI.installUI(MetalTreeUI.java:95)
      at javax.swing.JComponent.setUI(JComponent.java:650)
      at javax.swing.JTree.setUI(JTree.java:539)
      at javax.swing.JTree.updateUI(JTree.java:555)
      at javax.swing.JTree.<init>(JTree.java:510)
      at javax.swing.JTree.<init>(JTree.java:408)
      at com.jdv.insight.client.TestCase.<init>(TestCase.java:36)
      at com.jdv.insight.client.TestCase.main(TestCase.java:29)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import javax.swing.*;
      import javax.swing.plaf.FontUIResource;
      import javax.swing.plaf.metal.MetalLookAndFeel;
      import javax.swing.plaf.metal.OceanTheme;
      import java.awt.*;

      public class TestCase extends JFrame {

          public static void main(String[] args) {
              try {
                  MetalLookAndFeel.setCurrentTheme(new MyTheme());
                  UIManager.setLookAndFeel(MetalLookAndFeel.class.getName());
              } catch (Exception e) {
                  e.printStackTrace();
              }
              TestCase testCase = new TestCase();
              testCase.pack();
              testCase.setVisible(true);
          }

          public TestCase() {
              getContentPane().setLayout(new BorderLayout());
              JTree tree = new JTree();
              JScrollPane scrollPane = new JScrollPane(tree);
              getContentPane().add(scrollPane, BorderLayout.CENTER);
          }

          private static class MyTheme extends OceanTheme {
              FontUIResource tahomaFont = new FontUIResource("Tahoma", Font.PLAIN, 11);

              public FontUIResource getControlTextFont() {
                  return tahomaFont;
              }

              public FontUIResource getUserTextFont() {
                  return tahomaFont;
              }

              public FontUIResource getMenuTextFont() {
                  return tahomaFont;
              }
          }
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      I worked around the problem by copying the icons/ocean subtree from rt.jar into the package structure relative to the new OceanTheme derived class.
      ###@###.### 11/1/04 23:44 GMT

            shickeysunw Shannon Hickey (Inactive)
            rmandalasunw Ranjith Mandala (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: