5076761: JList.setSelectedValue(null, ...) doesn't do anything
authorpbansal
Thu, 15 Feb 2018 14:20:44 +0530
changeset 49085 cf931670015b
parent 49084 c372651def0e
child 49086 96ea4dff640e
5076761: JList.setSelectedValue(null, ...) doesn't do anything Reviewed-by: serb, ssadetsky, psadhukhan
src/java.desktop/share/classes/javax/swing/JList.java
test/jdk/javax/swing/JList/SetSelectedValueTest.java
--- a/src/java.desktop/share/classes/javax/swing/JList.java	Mon Feb 12 10:31:42 2018 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JList.java	Thu Feb 15 14:20:44 2018 +0530
@@ -2359,6 +2359,7 @@
 
     /**
      * Selects the specified object from the list.
+     * If the object passed is {@code null}, the selection is cleared.
      *
      * @param anObject      the object to select
      * @param shouldScroll  {@code true} if the list should scroll to display
@@ -2366,7 +2367,7 @@
      */
     public void setSelectedValue(Object anObject,boolean shouldScroll) {
         if(anObject == null)
-            setSelectedIndex(-1);
+            clearSelection();
         else if(!anObject.equals(getSelectedValue())) {
             int i,c;
             ListModel<E> dm = getModel();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/swing/JList/SetSelectedValueTest.java	Thu Feb 15 14:20:44 2018 +0530
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2018, 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
+ * @key headful
+ * @bug 5076761
+ * @summary Verifies that the selection is cleared when setSelectedValue is
+ *          called with null
+ * @run main SetSelectedValueTest
+ */
+
+import javax.swing.SwingUtilities;
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.ListSelectionModel;
+import java.util.Collections;
+import java.util.List;
+
+public class SetSelectedValueTest {
+    public static void main(String[] args) throws Exception {
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                // Create a JList with 2 elements
+                DefaultListModel dlm = new DefaultListModel();
+                JList list = new JList<String>(dlm);
+                list.setSelectionMode(
+                        ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+                dlm.addElement("1");
+                dlm.addElement("2");
+
+                // Select both the elements added in list
+                list.setSelectionInterval(0, 1);
+                checkSelectionByList(list, List.of("1", "2"));
+
+                // Set the selected value as null. This should clear the
+                // selection
+                list.setSelectedValue(null, true);
+                checkSelectionByList(list, Collections.emptyList());
+
+                // Select both the elements added in list
+                list.setSelectionInterval(0, 1);
+                checkSelectionByList(list, List.of("1", "2"));
+            }
+        });
+    }
+
+    static void checkSelectionByList(JList list, List<String> selectionList)
+            throws RuntimeException {
+        List<String> listSelection = list.getSelectedValuesList();
+        if (!listSelection.equals(selectionList)) {
+            System.out.println("Expected: " + selectionList);
+            System.out.println("Actual: " + listSelection);
+            throw new RuntimeException("Wrong selection");
+        }
+    }
+}