11/*
2- * Copyright (c) 2000, 2024 , Oracle and/or its affiliates. All rights reserved.
2+ * Copyright (c) 2000, 2025 , Oracle and/or its affiliates. All rights reserved.
33 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44 *
55 * This code is free software; you can redistribute it and/or modify it
2525 * @test
2626 * @bug 4313052
2727 * @summary Test cursor changes after mouse dragging ends
28- * @library /java/awt/regtesthelpers
29- * @build PassFailJFrame
3028 * @run main/manual ListDragCursor
3129 */
3230
31+ import java .awt .BorderLayout ;
32+ import java .awt .Button ;
3333import java .awt .Cursor ;
34+ import java .awt .EventQueue ;
3435import java .awt .Frame ;
3536import java .awt .List ;
3637import java .awt .Panel ;
3738import java .awt .TextArea ;
39+ import java .util .concurrent .CountDownLatch ;
40+ import java .util .concurrent .TimeUnit ;
3841
3942public class ListDragCursor {
40- public static void main (String [] args ) throws Exception {
41- String INSTRUCTIONS = """
43+ private static final String INSTRUCTIONS = """
4244 1. Move mouse to the TextArea.
4345 2. Press the left mouse button.
4446 3. Drag mouse to the list.
4547 4. Release the left mouse button.
4648
47- If the mouse cursor starts as a Text Line Cursor and changes
48- to a regular Pointer Cursor, then Hand Cursor when hovering
49- the list, pass the test. This test fails if the cursor does
50- not update at all when pointing over the different components.
49+ The mouse cursor should appear as an I-beam cursor
50+ and should stay the same while dragging across the
51+ components. Once you reach the list, release the
52+ left mouse button. As soon as you release the left
53+ mouse button, the cursor should change to a Hand
54+ cursor. If true, this test passes.
55+
56+ The test fails if the cursor updates while dragging
57+ over the components before releasing the left
58+ mouse button.
5159 """ ;
5260
53- PassFailJFrame .builder ()
54- .title ("Test Instructions" )
55- .instructions (INSTRUCTIONS )
56- .rows ((int ) INSTRUCTIONS .lines ().count () + 2 )
57- .columns (35 )
58- .testUI (ListDragCursor ::createUI )
59- .build ()
60- .awaitAndCheck ();
61+ private static Frame testFrame ;
62+ private static Frame instructionsFrame ;
63+
64+ private static final CountDownLatch countDownLatch = new CountDownLatch (1 );
65+
66+ public static void main (String [] args ) throws Exception {
67+ try {
68+ EventQueue .invokeAndWait (() -> {
69+ instructionsFrame = createInstructionsFrame ();
70+ testFrame = createTestFrame ();
71+ });
72+ if (!countDownLatch .await (5 , TimeUnit .MINUTES )) {
73+ throw new RuntimeException ("Test timeout : No action was"
74+ + " taken on the test." );
75+ }
76+ } finally {
77+ EventQueue .invokeAndWait (ListDragCursor ::disposeFrames );
78+ }
6179 }
6280
63- public static Frame createUI () {
81+ static Frame createTestFrame () {
6482 Frame frame = new Frame ("Cursor change after drag" );
6583 Panel panel = new Panel ();
6684
@@ -78,7 +96,51 @@ public static Frame createUI() {
7896 panel .add (list );
7997
8098 frame .add (panel );
81- frame .setBounds (300 , 100 , 300 , 150 );
99+ frame .setSize (300 , 150 );
100+ frame .setLocation (instructionsFrame .getX ()
101+ + instructionsFrame .getWidth (),
102+ instructionsFrame .getY ());
103+ frame .setVisible (true );
104+ return frame ;
105+ }
106+
107+ static Frame createInstructionsFrame () {
108+ Frame frame = new Frame ("Test Instructions" );
109+ Panel mainPanel = new Panel (new BorderLayout ());
110+ TextArea textArea = new TextArea (INSTRUCTIONS ,
111+ 15 , 35 , TextArea .SCROLLBARS_NONE );
112+
113+ Panel btnPanel = new Panel ();
114+ Button passBtn = new Button ("Pass" );
115+ Button failBtn = new Button ("Fail" );
116+ btnPanel .add (passBtn );
117+ btnPanel .add (failBtn );
118+
119+ passBtn .addActionListener (e -> {
120+ countDownLatch .countDown ();
121+ System .out .println ("Test passed." );
122+ });
123+ failBtn .addActionListener (e -> {
124+ countDownLatch .countDown ();
125+ throw new RuntimeException ("Test Failed." );
126+ });
127+
128+ mainPanel .add (textArea , BorderLayout .CENTER );
129+ mainPanel .add (btnPanel , BorderLayout .SOUTH );
130+
131+ frame .add (mainPanel );
132+ frame .pack ();
133+ frame .setLocationRelativeTo (null );
134+ frame .setVisible (true );
82135 return frame ;
83136 }
137+
138+ static void disposeFrames () {
139+ if (testFrame != null ) {
140+ testFrame .dispose ();
141+ }
142+ if (instructionsFrame != null ) {
143+ instructionsFrame .dispose ();
144+ }
145+ }
84146}
0 commit comments