bug6406264.java revision 15235:fe58d505fffd
1/* 2 * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26/* 27 * @test 28 * @key headful 29 * @bug 6406264 30 * @summary Tests that JComboBox's focusable popup can be shown. 31 * @author Mikhail Lapshin 32 * @run main bug6406264 33 */ 34 35import javax.swing.JComboBox; 36import javax.swing.JFrame; 37import javax.swing.SwingUtilities; 38import javax.swing.plaf.basic.BasicComboBoxUI; 39import javax.swing.plaf.basic.ComboPopup; 40import javax.swing.plaf.basic.BasicComboPopup; 41import java.awt.*; 42 43public class bug6406264 extends JComboBox { 44 45 static JFrame frame; 46 static bug6406264 comboBox; 47 48 public static void main(String[] args) throws Exception { 49 50 Robot robot = new Robot(); 51 // Setup and show frame 52 SwingUtilities.invokeAndWait( 53 new Runnable() { 54 public void run() { 55 frame = new JFrame("JComboBox6406264 test"); 56 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 57 58 comboBox = new bug6406264("One", "Two", "Three"); 59 frame.getContentPane().add(comboBox); 60 61 frame.setLocationRelativeTo(null); 62 frame.pack(); 63 frame.setVisible(true); 64 } 65 } 66 ); 67 68 robot.waitForIdle(); 69 70 // Show popup 71 SwingUtilities.invokeAndWait( 72 new Runnable() { 73 public void run() { 74 comboBox.showPopup(); 75 } 76 }); 77 robot.waitForIdle(); 78 79 // Check that popup is visible 80 SwingUtilities.invokeAndWait( 81 new Runnable() { 82 public void run() { 83 if (comboBox.getUI().isPopupVisible(comboBox) == false) 84 { 85 throw new RuntimeException("A focusable popup is not visible " + 86 "in JComboBox!"); 87 } 88 } 89 } 90 ); 91 92 frame.dispose(); 93 } 94 95 public bug6406264(Object ... items) { 96 super(items); 97 } 98 99 public void updateUI() { 100 setUI(new CustomComboBoxUI()); 101 } 102 103 // Use FocusablePopup for our JComboBox 104 private class CustomComboBoxUI extends BasicComboBoxUI { 105 protected ComboPopup createPopup() { 106 return new FocusablePopup(bug6406264.this); 107 } 108 } 109 110 // Popup window which can take a focus 111 private class FocusablePopup extends BasicComboPopup { 112 public FocusablePopup(JComboBox combo) { 113 super(combo); 114 } 115 116 public boolean isFocusable() { 117 return true; 118 } 119 } 120} 121