Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
236 lines
7.5 KiB
Java
236 lines
7.5 KiB
Java
/*
|
|
* Copyright (c) 2001, 2025, 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.Button;
|
|
import java.awt.Color;
|
|
import java.awt.Dialog;
|
|
import java.awt.Dimension;
|
|
import java.awt.Frame;
|
|
import java.awt.GraphicsConfiguration;
|
|
import java.awt.GraphicsDevice;
|
|
import java.awt.GraphicsEnvironment;
|
|
import java.awt.GridLayout;
|
|
import java.awt.Label;
|
|
import java.awt.Panel;
|
|
import java.awt.Point;
|
|
import java.awt.ScrollPane;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.WindowAdapter;
|
|
import java.awt.event.WindowEvent;
|
|
|
|
import javax.swing.JDialog;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.WindowConstants;
|
|
|
|
import jtreg.SkippedException;
|
|
|
|
/*
|
|
* @test
|
|
* @bug 4368500
|
|
* @key multimon
|
|
* @summary Dialog needs a constructor with GraphicsConfiguration
|
|
* @library /java/awt/regtesthelpers /test/lib
|
|
* @build PassFailJFrame
|
|
* @run main/manual DialogTest
|
|
*/
|
|
|
|
public class DialogTest {
|
|
static GraphicsDevice[] gds;
|
|
|
|
private static Frame f;
|
|
private static Frame dummyFrame = new Frame();
|
|
private static Dialog dummyDialog = new Dialog(dummyFrame);
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
gds = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
|
|
if (gds.length < 2) {
|
|
throw new SkippedException("You have only one monitor in your system" +
|
|
" - test skipped");
|
|
}
|
|
|
|
String INSTRUCTIONS = """
|
|
This test tests the multiscreen functionality of Dialogs and JDialogs.
|
|
You should see the message "X screens detected", where X
|
|
is the number of screens on your system. If X is incorrect, press Fail.
|
|
|
|
In the test window, there are a list of buttons representing each
|
|
type of dialog for each screen.
|
|
If there aren't buttons for every screen in your system, press Fail.
|
|
|
|
Press each button, and the indicated type of dialog should appear
|
|
on the indicated screen.
|
|
Modal dialogs should not allow to click on the Instructions or
|
|
DialogTest windows.
|
|
|
|
The buttons turn yellow once they have been pressed, to keep track
|
|
of test progress.
|
|
|
|
If all Dialogs appear correctly, press Pass.
|
|
If Dialogs appear on the wrong screen or don't behave in
|
|
proper modality, press Fail.""";
|
|
|
|
PassFailJFrame.builder()
|
|
.instructions(INSTRUCTIONS)
|
|
.columns(40)
|
|
.logArea(5)
|
|
.testUI(DialogTest::init)
|
|
.build()
|
|
.awaitAndCheck();
|
|
}
|
|
|
|
public static Frame init() {
|
|
PassFailJFrame.log(gds.length + " screens detected.");
|
|
f = new Frame("DialogTest UI");
|
|
f.setSize(400, 400);
|
|
MyScrollPane sp = new MyScrollPane();
|
|
|
|
Panel p = new Panel();
|
|
p.setLayout(new GridLayout(0, 1));
|
|
|
|
for (int i = 0; i < gds.length; i++) {
|
|
Button btn;
|
|
|
|
//screen # , modal, frame-owned, swing
|
|
btn = new MyButton(new DialogInfo(i, false, false, false));
|
|
p.add(btn);
|
|
|
|
btn = new MyButton(new DialogInfo(i, true, false, false));
|
|
p.add(btn);
|
|
|
|
btn = new MyButton(new DialogInfo(i, false, true, false));
|
|
p.add(btn);
|
|
|
|
btn = new MyButton(new DialogInfo(i, true, true, false));
|
|
p.add(btn);
|
|
|
|
btn = new MyButton(new DialogInfo(i, false, false, true));
|
|
p.add(btn);
|
|
|
|
btn = new MyButton(new DialogInfo(i, true, false, true));
|
|
p.add(btn);
|
|
|
|
btn = new MyButton(new DialogInfo(i, false, true, true));
|
|
p.add(btn);
|
|
|
|
btn = new MyButton(new DialogInfo(i, true, true, true));
|
|
p.add(btn);
|
|
|
|
}
|
|
sp.add(p);
|
|
f.add(sp);
|
|
return f;
|
|
}
|
|
|
|
static class MyScrollPane extends ScrollPane {
|
|
@Override
|
|
public Dimension getPreferredSize() {
|
|
return f.getSize();
|
|
}
|
|
}
|
|
|
|
static class MyButton extends Button {
|
|
public MyButton(DialogInfo info) {
|
|
setLabel(info.toString());
|
|
addActionListener(new PutupDialog(info));
|
|
}
|
|
}
|
|
|
|
static class PutupDialog implements ActionListener {
|
|
DialogInfo info;
|
|
|
|
public PutupDialog(DialogInfo info) {
|
|
this.info = info;
|
|
}
|
|
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
((Button) (e.getSource())).setBackground(Color.yellow);
|
|
Dialog d = info.createDialog();
|
|
d.show();
|
|
}
|
|
}
|
|
|
|
static class DialogInfo {
|
|
int num;
|
|
boolean modal;
|
|
boolean frameOwned;
|
|
boolean swing;
|
|
|
|
public DialogInfo(int num, boolean modal, boolean frameOwned, boolean swing) {
|
|
this.num = num;
|
|
this.modal = modal;
|
|
this.frameOwned = frameOwned;
|
|
this.swing = swing;
|
|
}
|
|
|
|
public Dialog createDialog() {
|
|
GraphicsConfiguration gc = gds[num].getDefaultConfiguration();
|
|
|
|
Dialog d;
|
|
|
|
if (swing) {
|
|
if (frameOwned) {
|
|
d = new JDialog(dummyFrame, toString(), modal, gc);
|
|
} else {
|
|
d = new JDialog(dummyDialog, toString(), modal, gc);
|
|
}
|
|
|
|
((JDialog) d).setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
|
|
if (modal) {
|
|
((JDialog) d).getContentPane().add(new JLabel("Check that I am modal!"));
|
|
}
|
|
} else {
|
|
if (frameOwned) {
|
|
d = new Dialog(dummyFrame, toString(), modal, gc);
|
|
} else {
|
|
d = new Dialog(dummyDialog, toString(), modal, gc);
|
|
}
|
|
|
|
d.addWindowListener(new WindowAdapter() {
|
|
public void windowClosing(WindowEvent e) {
|
|
e.getComponent().hide();
|
|
}
|
|
});
|
|
if (modal) {
|
|
d.add(new Label("Check that I am modal!"));
|
|
}
|
|
}
|
|
|
|
d.setLocation(new Point((int) (gc.getBounds().getX() + 20)
|
|
, (int) (gc.getBounds().getY() + 20)));
|
|
d.setSize(300, 100);
|
|
|
|
return d;
|
|
}
|
|
|
|
public String toString() {
|
|
return "Screen " + num + (frameOwned ? " Frame-owned" : " Dialog-owned")
|
|
+ (modal ? " modal " : " non-modal ")
|
|
+ (swing ? "JDialog" : "Dialog");
|
|
}
|
|
}
|
|
}
|
|
|
|
|