Mercurial > hg > openjdk > icedtea > jdk7 > jdk
changeset 2526:82524b068f77
6670274: Incorrect tab titles for JTabbedPane if using HTML (BasicTabbedPanelUI problem)
Reviewed-by: rupashka
author | alexp |
---|---|
date | Fri, 28 May 2010 19:55:52 +0400 |
parents | 9b247a6290a4 |
children | be03f9a285f0 |
files | src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java test/javax/swing/JTabbedPane/6670274/bug6670274.java |
diffstat | 2 files changed, 103 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java Fri May 28 19:46:26 2010 +0400 +++ b/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);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/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("<html><i>Two</i></html>", new JPanel()); + pane.add("three", new JPanel()); + pane.setTitleAt(0, "<html><i>ONE</i></html>"); + check(ui, 0, 1); + + pane.setTitleAt(1, "hello"); + check(ui, 0); + + pane.setTitleAt(0, "<html>html</html>"); + pane.setTitleAt(2, "<html>html</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(); + } + }); + } +}