From 288c59753b5d50ca14cb53a5b53ff824b1e50070 Mon Sep 17 00:00:00 2001 From: TejeshR13 Date: Sun, 2 Jan 2022 20:01:48 +0530 Subject: [PATCH 1/5] Initial Commit. From 7129054aca399efdec8612830ee471126da3fca5 Mon Sep 17 00:00:00 2001 From: Tejesh R Date: Wed, 24 Aug 2022 12:55:29 +0530 Subject: [PATCH 2/5] Fix - Updated filepane with fix and added test case --- .../share/classes/sun/swing/FilePane.java | 15 +++ ...ultiSelectionEnabledSelectedFilesTest.java | 91 +++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java diff --git a/src/java.desktop/share/classes/sun/swing/FilePane.java b/src/java.desktop/share/classes/sun/swing/FilePane.java index 5acf1380250b3..7ed0c72da0cbf 100644 --- a/src/java.desktop/share/classes/sun/swing/FilePane.java +++ b/src/java.desktop/share/classes/sun/swing/FilePane.java @@ -1753,6 +1753,21 @@ private void doFileSelectionModeChanged(PropertyChangeEvent e) { private void doMultiSelectionChanged(PropertyChangeEvent e) { if (getFileChooser().isMultiSelectionEnabled()) { listSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + + //Check if any files are selected before setting multi-Selection. + //If selected, retain them and update the selected files in FileChooser class. + File[] selectedFiles = null; + if(getFileChooser().getSelectedFiles().length != 0) { + selectedFiles = getFileChooser().getSelectedFiles(); + } else if(getFileChooser().getSelectedFile() != null) { + File selectedFile = getFileChooser().getSelectedFile(); + selectedFiles = new File[1]; + selectedFiles[0] = selectedFile; + } + + if(selectedFiles != null) { + getFileChooser().setSelectedFiles(selectedFiles); + } } else { listSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); clearSelection(); diff --git a/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java b/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java new file mode 100644 index 0000000000000..2756e82e0a4bf --- /dev/null +++ b/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2022, 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. + */ + +import java.awt.Color; +import java.io.File; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JTextArea; +import javax.swing.SwingUtilities; + +/* + * @test + * @bug 4834298 + * @key headful + * @summary Test to check if the getSelectedFiles of JFilesChooser + * returns selectedFiles when Multi-Selection is enabled. + * @run main/manual MultiSelectionEnabledSelectedFilesTest + */ +public class MultiSelectionEnabledSelectedFilesTest { + private static JFrame frame; + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + try { + runTest(); + } finally { + frame.dispose(); + } + } + }); + System.out.println("Test Pass!"); + } + + static void runTest() { + //Initialize the components + String INSTRUCTIONS + = "Instructions to Test:"+ + "\n1. Select a valid file from mouse click on first "+ + "dialog."+ + "\n2. After Selection, first dialog closes and second " + + "dialog opens where multi-Selection is enabled."+ + "\n3. Select the same previously selected file without changing " + + "mouse position or selection."+ + "\n4. If the selected file is updated in then getSelectedFiles "+ + "returns the file selected and test is PASS."+ + "\n5. If the selected file is not updated and getSelectedFiles "+ + "returns empty array, then Test FAILS."; + + JFileChooser chooser = new JFileChooser(); + JTextArea textArea = new JTextArea(); + frame = new JFrame("Test Instructions"); + + textArea.setText(INSTRUCTIONS); + textArea.setEnabled(false); + textArea.setDisabledTextColor(Color.black); + textArea.setBackground(Color.white); + + frame.add(textArea); + frame.pack(); + frame.setVisible(true); + + chooser.showOpenDialog(null); + chooser.setMultiSelectionEnabled(true); + chooser.showOpenDialog(null); + File[] files = chooser.getSelectedFiles(); + + if(files.length <= 0) { + throw new RuntimeException("Test Failed since selected files are empty!!"); + } + } +} From 71c936a088e9fa98380fcf36e26e0d99693f66dc Mon Sep 17 00:00:00 2001 From: Tejesh R Date: Thu, 1 Sep 2022 12:04:36 +0530 Subject: [PATCH 3/5] Updated based on review comments --- src/java.desktop/share/classes/sun/swing/FilePane.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/java.desktop/share/classes/sun/swing/FilePane.java b/src/java.desktop/share/classes/sun/swing/FilePane.java index 7ed0c72da0cbf..6f029b5cc765b 100644 --- a/src/java.desktop/share/classes/sun/swing/FilePane.java +++ b/src/java.desktop/share/classes/sun/swing/FilePane.java @@ -1757,15 +1757,15 @@ private void doMultiSelectionChanged(PropertyChangeEvent e) { //Check if any files are selected before setting multi-Selection. //If selected, retain them and update the selected files in FileChooser class. File[] selectedFiles = null; - if(getFileChooser().getSelectedFiles().length != 0) { + if (getFileChooser().getSelectedFiles().length != 0) { selectedFiles = getFileChooser().getSelectedFiles(); - } else if(getFileChooser().getSelectedFile() != null) { + } else if (getFileChooser().getSelectedFile() != null) { File selectedFile = getFileChooser().getSelectedFile(); selectedFiles = new File[1]; selectedFiles[0] = selectedFile; } - if(selectedFiles != null) { + if (selectedFiles != null) { getFileChooser().setSelectedFiles(selectedFiles); } } else { From 1d7f271badcf469a2180384e829c848205f84095 Mon Sep 17 00:00:00 2001 From: Tejesh R Date: Tue, 6 Sep 2022 16:38:08 +0530 Subject: [PATCH 4/5] Updated based on review comments --- src/java.desktop/share/classes/sun/swing/FilePane.java | 5 ++--- .../JFileChooser/MultiSelectionEnabledSelectedFilesTest.java | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/java.desktop/share/classes/sun/swing/FilePane.java b/src/java.desktop/share/classes/sun/swing/FilePane.java index 6f029b5cc765b..450fc11c6a0bd 100644 --- a/src/java.desktop/share/classes/sun/swing/FilePane.java +++ b/src/java.desktop/share/classes/sun/swing/FilePane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2022, 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 @@ -1760,9 +1760,8 @@ private void doMultiSelectionChanged(PropertyChangeEvent e) { if (getFileChooser().getSelectedFiles().length != 0) { selectedFiles = getFileChooser().getSelectedFiles(); } else if (getFileChooser().getSelectedFile() != null) { - File selectedFile = getFileChooser().getSelectedFile(); selectedFiles = new File[1]; - selectedFiles[0] = selectedFile; + selectedFiles[0] = getFileChooser().getSelectedFile(); } if (selectedFiles != null) { diff --git a/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java b/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java index 2756e82e0a4bf..037084f2149dc 100644 --- a/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java +++ b/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java @@ -84,7 +84,7 @@ static void runTest() { chooser.showOpenDialog(null); File[] files = chooser.getSelectedFiles(); - if(files.length <= 0) { + if (files.length <= 0) { throw new RuntimeException("Test Failed since selected files are empty!!"); } } From c437cdfc0efb873e7ea1f6e30ef869d499be7a7c Mon Sep 17 00:00:00 2001 From: Tejesh R Date: Thu, 8 Sep 2022 22:04:28 +0530 Subject: [PATCH 5/5] Updated based on review comments --- .../share/classes/sun/swing/FilePane.java | 17 ++-------------- ...ultiSelectionEnabledSelectedFilesTest.java | 20 +++++++++---------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/java.desktop/share/classes/sun/swing/FilePane.java b/src/java.desktop/share/classes/sun/swing/FilePane.java index 450fc11c6a0bd..45dc11ba25bea 100644 --- a/src/java.desktop/share/classes/sun/swing/FilePane.java +++ b/src/java.desktop/share/classes/sun/swing/FilePane.java @@ -1751,25 +1751,12 @@ private void doFileSelectionModeChanged(PropertyChangeEvent e) { } private void doMultiSelectionChanged(PropertyChangeEvent e) { + clearSelection(); if (getFileChooser().isMultiSelectionEnabled()) { listSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - - //Check if any files are selected before setting multi-Selection. - //If selected, retain them and update the selected files in FileChooser class. - File[] selectedFiles = null; - if (getFileChooser().getSelectedFiles().length != 0) { - selectedFiles = getFileChooser().getSelectedFiles(); - } else if (getFileChooser().getSelectedFile() != null) { - selectedFiles = new File[1]; - selectedFiles[0] = getFileChooser().getSelectedFile(); - } - - if (selectedFiles != null) { - getFileChooser().setSelectedFiles(selectedFiles); - } + getFileChooser().setSelectedFile(null); } else { listSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - clearSelection(); getFileChooser().setSelectedFiles(null); } } diff --git a/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java b/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java index 037084f2149dc..928185556fb27 100644 --- a/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java +++ b/test/jdk/javax/swing/JFileChooser/MultiSelectionEnabledSelectedFilesTest.java @@ -32,6 +32,7 @@ * @test * @bug 4834298 * @key headful + * @requires (os.family == "windows" | os.family == "linux") * @summary Test to check if the getSelectedFiles of JFilesChooser * returns selectedFiles when Multi-Selection is enabled. * @run main/manual MultiSelectionEnabledSelectedFilesTest @@ -55,16 +56,15 @@ static void runTest() { //Initialize the components String INSTRUCTIONS = "Instructions to Test:"+ - "\n1. Select a valid file from mouse click on first "+ + "\n1. Select a valid file using mouse double-click on first "+ "dialog."+ - "\n2. After Selection, first dialog closes and second " + - "dialog opens where multi-Selection is enabled."+ - "\n3. Select the same previously selected file without changing " + - "mouse position or selection."+ - "\n4. If the selected file is updated in then getSelectedFiles "+ - "returns the file selected and test is PASS."+ - "\n5. If the selected file is not updated and getSelectedFiles "+ - "returns empty array, then Test FAILS."; + "\n2. After Selection, first dialog will close and second " + + "dialog opens with multi-Selection enabled."+ + "\n3. Select the same file using mouse double-click without " + + "moving mouse position or selection."+ + "\n4. If the selected file is updated then getSelectedFiles "+ + "returns the file selected and test will PASS otherwise test "+ + "will FAIL"; JFileChooser chooser = new JFileChooser(); JTextArea textArea = new JTextArea(); @@ -84,7 +84,7 @@ static void runTest() { chooser.showOpenDialog(null); File[] files = chooser.getSelectedFiles(); - if (files.length <= 0) { + if (files.length == 0) { throw new RuntimeException("Test Failed since selected files are empty!!"); } }