OpenJDK / portola / portola
changeset 7961:252a7e8c37c1
6342301: Bad interaction between setting the ui and file filters in JFileChooser
Reviewed-by: alexp
author | rupashka |
---|---|
date | Mon, 17 Jan 2011 19:14:58 +0300 |
parents | 440dbbdb5cbd |
children | fbf25bae06b1 |
files | jdk/src/share/classes/javax/swing/JFileChooser.java jdk/test/javax/swing/JFileChooser/6342301/bug6342301.java |
diffstat | 2 files changed, 80 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/share/classes/javax/swing/JFileChooser.java Thu Jan 13 20:12:45 2011 +0300 +++ b/jdk/src/share/classes/javax/swing/JFileChooser.java Mon Jan 17 19:14:58 2011 +0300 @@ -256,10 +256,6 @@ private FileView fileView = null; - // uiFileView is not serialized, as it is initialized - // by updateUI() after deserialization - private transient FileView uiFileView = null; - private boolean controlsShown = true; private boolean useFileHiding = true; @@ -1504,6 +1500,9 @@ if(getFileView() != null) { filename = getFileView().getName(f); } + + FileView uiFileView = getUI().getFileView(this); + if(filename == null && uiFileView != null) { filename = uiFileView.getName(f); } @@ -1524,6 +1523,9 @@ if(getFileView() != null) { description = getFileView().getDescription(f); } + + FileView uiFileView = getUI().getFileView(this); + if(description == null && uiFileView != null) { description = uiFileView.getDescription(f); } @@ -1544,6 +1546,9 @@ if(getFileView() != null) { typeDescription = getFileView().getTypeDescription(f); } + + FileView uiFileView = getUI().getFileView(this); + if(typeDescription == null && uiFileView != null) { typeDescription = uiFileView.getTypeDescription(f); } @@ -1564,6 +1569,9 @@ if(getFileView() != null) { icon = getFileView().getIcon(f); } + + FileView uiFileView = getUI().getFileView(this); + if(icon == null && uiFileView != null) { icon = uiFileView.getIcon(f); } @@ -1584,6 +1592,9 @@ if (getFileView() != null) { traversable = getFileView().isTraversable(f); } + + FileView uiFileView = getUI().getFileView(this); + if (traversable == null && uiFileView != null) { traversable = uiFileView.isTraversable(f); } @@ -1791,7 +1802,6 @@ } setUI(ui); - uiFileView = getUI().getFileView(this); if(isAcceptAllFileFilterUsed()) { addChoosableFileFilter(getAcceptAllFileFilter()); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JFileChooser/6342301/bug6342301.java Mon Jan 17 19:14:58 2011 +0300 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 6342301 + @summary Bad interaction between setting the ui and file filters in JFileChooser + @author Pavel Porvatov +*/ + +import javax.swing.*; +import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.metal.MetalFileChooserUI; +import javax.swing.plaf.metal.MetalLookAndFeel; +import java.io.File; + +public class bug6342301 { + private static String tempDir; + + public static void main(String[] args) throws Exception { + tempDir = System.getProperty("java.io.tmpdir"); + + if (tempDir.length() == 0) { //'java.io.tmpdir' isn't guaranteed to be defined + tempDir = System.getProperty("user.home"); + } + + System.out.println("Temp directory: " + tempDir); + + UIManager.setLookAndFeel(new MetalLookAndFeel()); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + HackedFileChooser openChooser = new HackedFileChooser(); + + openChooser.setUI(new MetalFileChooserUI(openChooser)); + openChooser.setCurrentDirectory(new File(tempDir)); + } + }); + } + + private static class HackedFileChooser extends JFileChooser { + public void setUI(ComponentUI newUI) { + super.setUI(newUI); + } + } +}