diff --git a/src/share/classes/javax/swing/JFileChooser.java b/src/share/classes/javax/swing/JFileChooser.java index eb67589e15c3545ea759884ad3970816c0321f88..3715ca0f43b5eb252276c8d9f4262939869358c7 100644 --- a/src/share/classes/javax/swing/JFileChooser.java +++ b/src/share/classes/javax/swing/JFileChooser.java @@ -256,10 +256,6 @@ public class JFileChooser extends JComponent implements Accessible { 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 @@ public class JFileChooser extends JComponent implements Accessible { 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 @@ public class JFileChooser extends JComponent implements Accessible { 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 @@ public class JFileChooser extends JComponent implements Accessible { 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 @@ public class JFileChooser extends JComponent implements Accessible { 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 @@ public class JFileChooser extends JComponent implements Accessible { 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 @@ public class JFileChooser extends JComponent implements Accessible { } setUI(ui); - uiFileView = getUI().getFileView(this); if(isAcceptAllFileFilterUsed()) { addChoosableFileFilter(getAcceptAllFileFilter()); } diff --git a/test/javax/swing/JFileChooser/6342301/bug6342301.java b/test/javax/swing/JFileChooser/6342301/bug6342301.java new file mode 100644 index 0000000000000000000000000000000000000000..54b4128d96678f0c5a86757e9f62846a4cd1dda0 --- /dev/null +++ b/test/javax/swing/JFileChooser/6342301/bug6342301.java @@ -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); + } + } +}