Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/javax/swing/JPopupMenu/4634626/bug4634626.java
38918 views
1
/*
2
* Copyright (c) 2003, 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.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
/* @test
24
@bug 4634626
25
@summary Implement context popup menus for components
26
@author Alexander Zuev
27
@library ../../../../lib/testlibrary
28
@build ExtendedRobot
29
@run applet bug4634626.html
30
*/
31
import javax.swing.*;
32
import java.awt.event.*;
33
import java.awt.*;
34
35
public class bug4634626 extends JApplet {
36
37
public boolean passed = true;
38
public boolean done = false;
39
40
public JFrame mainFrame = new JFrame("Bug4634626");
41
public JRootPane rootPane = mainFrame.getRootPane();
42
public JPanel contentPane = new JPanel();
43
public JButton nopButton = new JButton("No popup button");
44
public JTextArea someText = new JTextArea("Some text here", 20, 10);
45
public JButton popButton = new JButton("Button with the popup");
46
47
public JPopupMenu btnPopup = new JPopupMenu();
48
public JPopupMenu commonPopup = new JPopupMenu();
49
static public Error toBeThrown = null;
50
static int popTrig = MouseEvent.BUTTON3_MASK;
51
static boolean popt = false;
52
53
public static class MouseWatcher extends MouseAdapter {
54
public void mousePressed(MouseEvent e) {
55
if(e.isPopupTrigger()) popt = true;
56
if(e.getComponent() != null &&
57
e.getComponent() instanceof JComponent &&
58
e.isPopupTrigger() &&
59
((JComponent)e.getComponent()).getComponentPopupMenu() != null) {
60
toBeThrown =
61
new Error("The event got thru the component with popup: "
62
+ e);
63
}
64
}
65
public void mouseReleased(MouseEvent e) {
66
if(e.isPopupTrigger()) popt = true;
67
if(e.getComponent() != null &&
68
e.getComponent() instanceof JComponent &&
69
e.isPopupTrigger() &&
70
((JComponent)e.getComponent()).getComponentPopupMenu() != null) {
71
toBeThrown =
72
new Error("The event got thru the component with popup: "
73
+ e);
74
}
75
if(toBeThrown != null) {
76
throw(toBeThrown);
77
}
78
}
79
}
80
81
public static MouseWatcher mouser = new MouseWatcher();
82
83
public void init() {
84
85
try {
86
popButton.setComponentPopupMenu(null);
87
popButton.setComponentPopupMenu(null);
88
popButton.setComponentPopupMenu(btnPopup);
89
popButton.setComponentPopupMenu(null);
90
} catch(Exception ex) {
91
System.err.println("Unexpected exception was thrown by " +
92
"setComponentPopupMenu() method: " + ex);
93
}
94
btnPopup.add("Button 1");
95
btnPopup.add("Button 2");
96
btnPopup.add("Button 3");
97
popButton.setComponentPopupMenu(btnPopup);
98
popButton.addMouseListener(mouser);
99
commonPopup.add("One");
100
commonPopup.add("Two");
101
commonPopup.add("Three");
102
103
contentPane.setLayout(new BorderLayout());
104
contentPane.setComponentPopupMenu(commonPopup);
105
contentPane.addMouseListener(mouser);
106
contentPane.add(nopButton, BorderLayout.NORTH);
107
nopButton.addMouseListener(mouser);
108
contentPane.add(popButton, BorderLayout.SOUTH);
109
someText.addMouseListener(mouser);
110
contentPane.add(someText, BorderLayout.CENTER);
111
mainFrame.setContentPane(contentPane);
112
113
mainFrame.pack();
114
mainFrame.setLocation(50, 50);
115
116
mainFrame.addWindowListener(new TestStateListener());
117
mainFrame.setVisible(true);
118
119
while(!done) Thread.yield();
120
121
if(!passed) {
122
throw new RuntimeException("Test failed");
123
}
124
125
}
126
127
public class TestStateListener extends WindowAdapter {
128
public void windowOpened(WindowEvent ev) {
129
try {
130
ev.getWindow().toFront();
131
ev.getWindow().requestFocus();
132
new Thread(new RobotThread()).start();
133
} catch (Exception ex) {
134
throw new RuntimeException("Thread Exception");
135
}
136
}
137
}
138
139
class RobotThread implements Runnable {
140
public void run() {
141
ExtendedRobot robo;
142
try {
143
robo = new ExtendedRobot();
144
}catch(Exception ex) {
145
ex.printStackTrace();
146
throw new RuntimeException("Cannot create Robot");
147
}
148
robo.setAutoDelay(100);
149
robo.waitForIdle();
150
151
// Determine working popup trigger event
152
clickMouseOn(robo, nopButton, popTrig);
153
robo.waitForIdle();
154
robo.delay(500);
155
if(!popt) popTrig = MouseEvent.BUTTON2_MASK;
156
157
// Inheritance is OFF by default. Popup should not appear.
158
clickMouseOn(robo, someText, popTrig);
159
160
// Set inheritance ON watch for popup.
161
someText.setInheritsPopupMenu(true);
162
clickMouseOn(robo, someText, popTrig);
163
robo.waitForIdle();
164
robo.delay(500);
165
if(!commonPopup.isVisible()) {
166
toBeThrown = new Error("Popup should be visible");
167
passed = false;
168
}
169
// Dispose popup.
170
robo.type(KeyEvent.VK_ESCAPE);
171
robo.waitForIdle();
172
someText.setInheritsPopupMenu(false);
173
174
// Button with popup assigned. Wathch for popup.
175
clickMouseOn(robo, popButton, popTrig);
176
robo.waitForIdle();
177
robo.delay(500);
178
if(!btnPopup.isVisible()) {
179
toBeThrown = new Error("Popup should be visible");
180
passed = false;
181
}
182
// Dispose popup.
183
robo.type(KeyEvent.VK_ESCAPE);
184
// Test finished.
185
done = true;
186
}
187
}
188
189
190
191
public void destroy() {
192
if(!passed) {
193
throw(toBeThrown);
194
}
195
}
196
private void clickMouseOn(ExtendedRobot robot, Component c, int button) {
197
java.awt.Point p = c.getLocationOnScreen();
198
java.awt.Dimension size = c.getSize();
199
p.x += size.width / 2;
200
p.y += size.height / 2;
201
robot.mouseMove(p.x, p.y);
202
robot.delay(100);
203
robot.click(button);
204
}
205
}
206
207