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

JTabbedPane.setTitleAt(index, string) does not allow a null string

XMLWordPrintable

    • b53
    • x86
    • linux

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

      ADDITIONAL OS VERSION INFORMATION :
      Red Hat 7.3 (Linux 2.4.18-17.7.x i686 unknown)


      A DESCRIPTION OF THE PROBLEM :
      The javadocs state the JTabbedPane.setTitleAt(index, string) can take null as the string argument. However, when you try to start an application the following stack trace is produced:

      Exception in thread "main" java.lang.NullPointerException
              at sun.awt.font.FontDesignMetrics.stringWidth(FontDesignMetrics.java:281)
              at javax.swing.SwingUtilities.computeStringWidth(SwingUtilities.java:713)
              at javax.swing.plaf.basic.BasicTabbedPaneUI.calculateTabWidth(BasicTabbedPaneUI.java:1455)
              at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateTabRects(BasicTabbedPaneUI.java:2251)
              at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateLayoutInfo(BasicTabbedPaneUI.java:2179)
              at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.layoutContainer(BasicTabbedPaneUI.java:2094)
              at java.awt.Container.layout(Container.java:1020)
              at java.awt.Container.doLayout(Container.java:1010)
              at java.awt.Container.validateTree(Container.java:1092)
              at java.awt.Container.validateTree(Container.java:1099)
              at java.awt.Container.validateTree(Container.java:1099)
              at java.awt.Container.validateTree(Container.java:1099)
              at java.awt.Container.validateTree(Container.java:1099)
              at java.awt.Container.validate(Container.java:1067)
              at java.awt.Window.show(Window.java:461)
              at TabbedPaneBug.main(TabbedPaneBug.java:14)


      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Create a tabbed pane and try to set a title to null

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The application to run as normal with no title for the tab. Even when you also specify an icon to be displayed on the tab the same error occurs.
      ACTUAL -
      The component does not appear and a NullPointerException is thrown.

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Exception in thread "main" java.lang.NullPointerException
              at sun.awt.font.FontDesignMetrics.stringWidth(FontDesignMetrics.java:281)
              at javax.swing.SwingUtilities.computeStringWidth(SwingUtilities.java:713)
              at javax.swing.plaf.basic.BasicTabbedPaneUI.calculateTabWidth(BasicTabbedPaneUI.java:1455)
              at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateTabRects(BasicTabbedPaneUI.java:2251)
              at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateLayoutInfo(BasicTabbedPaneUI.java:2179)
              at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.layoutContainer(BasicTabbedPaneUI.java:2094)
              at java.awt.Container.layout(Container.java:1020)
              at java.awt.Container.doLayout(Container.java:1010)
              at java.awt.Container.validateTree(Container.java:1092)
              at java.awt.Container.validateTree(Container.java:1099)
              at java.awt.Container.validateTree(Container.java:1099)
              at java.awt.Container.validateTree(Container.java:1099)
              at java.awt.Container.validateTree(Container.java:1099)
              at java.awt.Container.validate(Container.java:1067)
              at java.awt.Window.show(Window.java:461)
              at TabbedPaneBug.main(TabbedPaneBug.java:14)



      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import javax.swing.*;

      public class TabbedPaneBug
      {

        public static void main(String[] args)
        {
           JTabbedPane tabbedPane = new JTabbedPane();
           tabbedPane.add("Tab 1", new JLabel("Test label"));
           tabbedPane.add("Tab 2", new JLabel("Test label 2"));
           tabbedPane.setTitleAt(1, null);
           JFrame frame = new JFrame();
           frame.getContentPane().add(tabbedPane);
           frame.show();
        }

      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Instead of setting the title to null set it to be an empty string.

            alexp Alexander Potochkin (Inactive)
            gmanwanisunw Girish Manwani (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: