The setTabComponentAt() method allows to set a component to a tabbed pane title.

  In the following example the tab title is "":
          tabbedPane.addTab(null, new JLabel("Content 1"));
          tabbedPane.setTabComponentAt(0, new JLabel("Title 1"));

The getBounds() method can also try to find a tab index by tabComponent and by icon in case if indexOfTab(title) fails.

Thanks,
Alexandr.


On 8/20/2015 5:54 PM, Alexander Scherbatiy wrote:
On 8/20/2015 12:50 AM, Pete Brunet wrote:
Please review this patch.
http://cr.openjdk.java.net/~ptbrunet/JDK-8133897/webrev.00/

The issue is that the application has a tab with a visible title but for some reason JTabbedPane's title field was "". This caused indexOfTab(title) to return -1 and then getTabBounds(parent, -1) raised ArrayIndexOutOfBoundsException.


         public Rectangle getBounds() {
-            return parent.getUI().getTabBounds(parent,
- parent.indexOfTab(title));
+            int i = parent.indexOfTab(title);
+            Rectangle r;
+ // Check for no title. Even though that's a bug in the app we should + // inhibit an ArrayIndexOutOfBoundsException from getTabBounds.
+            if (i == -1) {
+                r = null;
+            } else {
+                r = parent.getUI().getTabBounds(parent, i);
+            }
+            return r;
         }

Maybe someone more familiar with the code can see a bug related to why title is allowed to be "" when there is a visible title displayed in the tab. The bug I am working was raised during use of an app for which we do not have access so its source is not available.

It is possible to add icon with text so the title will be empty: tabbedPane.addTab(null, icon, new JLabel("Content"). But even in this case indexOfTab returns the first tab with null title: tabbedPane.indexOfTab((String)null).

Could it be that the tabbed pane title was changed between JTabbedPane.Page class creation and getBounds() method invoking?

   Thanks,
   Alexandr.

Thanks, Pete


Reply via email to