# HG changeset patch # User alexp # Date 1275062152 -14400 # Node ID 3d2dffc5a67d57ef7827bd2f93f6e1bb599a8fa8 # Parent 27cbc0c6ba347ac7466b69cbd72ad4dbb955fe42 6670274: Incorrect tab titles for JTabbedPane if using HTML (BasicTabbedPanelUI problem) Reviewed-by: rupashka diff -r 27cbc0c6ba34 -r 3d2dffc5a67d jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java Fri May 28 19:46:26 2010 +0400 +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java Fri May 28 19:55:52 2010 +0400 @@ -3524,7 +3524,11 @@ } else if (name =="indexForTitle") { calculatedBaseline = false; - updateHtmlViews((Integer)e.getNewValue()); + Integer index = (Integer) e.getNewValue(); + // remove the current index + // to let updateHtmlViews() insert the correct one + htmlViews.removeElementAt(index); + updateHtmlViews(index); } else if (name == "tabLayoutPolicy") { BasicTabbedPaneUI.this.uninstallUI(pane); BasicTabbedPaneUI.this.installUI(pane); diff -r 27cbc0c6ba34 -r 3d2dffc5a67d jdk/test/javax/swing/JTabbedPane/6670274/bug6670274.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JTabbedPane/6670274/bug6670274.java Fri May 28 19:55:52 2010 +0400 @@ -0,0 +1,98 @@ +/* + * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/*@test + @bug 6670274 + @summary Incorrect tab titles for JTabbedPane if using HTML (BasicTabbedPanelUI problem) + @author Alexander Potochkin + @run main bug6670274 +*/ + +import javax.swing.*; +import javax.swing.plaf.basic.BasicTabbedPaneUI; +import javax.swing.text.View; + +public class bug6670274 { + + private static void createGui() { + final JTabbedPane pane = new JTabbedPane(); + TestTabbedPaneUI ui = new TestTabbedPaneUI(); + pane.setUI(ui); + + pane.add("one", new JPanel()); + pane.add("Two", new JPanel()); + pane.add("three", new JPanel()); + pane.setTitleAt(0, "ONE"); + check(ui, 0, 1); + + pane.setTitleAt(1, "hello"); + check(ui, 0); + + pane.setTitleAt(0, "html"); + pane.setTitleAt(2, "html"); + check(ui, 0, 2); + } + + private static void check(TestTabbedPaneUI ui, int... indices) { + for(int i = 0; i < ui.getTabbedPane().getTabCount(); i++) { + System.out.print("Checking tab #" + i); + View view = ui.getTextViewForTab(i); + boolean found = false; + for (int j = 0; j < indices.length; j++) { + if (indices[j]== i) { + found = true; + break; + } + } + System.out.print("; view = " + view); + if (found) { + if (view == null) { + throw new RuntimeException("View is unexpectedly null"); + } + } else if (view != null) { + throw new RuntimeException("View is unexpectedly not null"); + } + System.out.println(" ok"); + } + System.out.println(""); + } + + + static class TestTabbedPaneUI extends BasicTabbedPaneUI { + public View getTextViewForTab(int tabIndex) { + return super.getTextViewForTab(tabIndex); + } + + public JTabbedPane getTabbedPane() { + return tabPane; + } + } + + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + bug6670274.createGui(); + } + }); + } +}