< prev index next >

test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java

Print this page

        

@@ -19,12 +19,25 @@
  * 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 javax.swing.*;
-import java.awt.*;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.RootPaneContainer;
+import javax.swing.JList;
+import javax.swing.JComboBox;
+import javax.swing.JPopupMenu;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import java.awt.GraphicsDevice;
+import java.awt.Container;
+import java.awt.BorderLayout;
+import java.awt.Point;
+import java.awt.Color;
+import java.awt.Window;
+import java.awt.EventQueue;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 
 /*
  * @test

@@ -51,10 +64,12 @@
     JComponent south;
     JComponent center;
     JPanel north;
     volatile boolean southClicked = false;
 
+    JPopupMenu popup = null;
+
     public static void main(String[] args) throws Exception {
         if (checkTranslucencyMode(GraphicsDevice.WindowTranslucency.TRANSLUCENT))
             for (Class<Window> windowClass: WINDOWS_TO_TEST)
                 new TranslucentJComboBox(windowClass).doTest();
     }

@@ -82,10 +97,28 @@
         JComboBox jComboBox = new JComboBox();
         for(int i = 0; i < 20; i++) {
             jComboBox.addItem("item " + i);
         }
         south = jComboBox;
+        jComboBox.addPopupMenuListener(new PopupMenuListener() {
+
+            @Override
+            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+                popup = (JPopupMenu) jComboBox.getUI()
+                        .getAccessibleChild(jComboBox, 0);
+            }
+
+            @Override
+            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+
+            }
+
+            @Override
+            public void popupMenuCanceled(PopupMenuEvent e) {
+
+            }
+        });
 
         south.addMouseListener(new MouseAdapter() {
             @Override
             public void mouseClicked(MouseEvent e) {
                 southClicked = true;

@@ -140,11 +173,17 @@
             throw new RuntimeException(
                     "Check for opaque drop down failed at point " + p1 +
                             ". Before click: " + c1 + ", after click: " + c1b +
                             ", expected is " + south.getBackground());
 
-        if (!c2.equals(c2b) && !south.getBackground().equals(c2b))
+        //This following check is only valid if the popup was created below the
+        // JComboBox and will be opaque or it is created above the JComboBox
+        // and it can not fit inside the JWindow along with JComboBox and will
+        // be opaque
+        if ( !c2.equals(c2b) && !south.getBackground().equals(c2b) &&
+                (popup.getLocationOnScreen().y > ls.y ||
+                window.getHeight() < popup.getHeight() + south.getHeight()))
             throw new RuntimeException(
                     "Check for opaque drop down failed at point " + p2 +
                             ". Before click: " + c2 + ", after click: " + c2b +
                             ", expected is " + south.getBackground());
 
< prev index next >