8318154: Improve stability of WheelModifier.java test

Reviewed-by: aivanov
This commit is contained in:
Renjith Kannath Pariyangad 2023-10-16 10:58:30 +00:00 committed by Alexey Ivanov
parent a36eaf03af
commit 668d4b077f

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2023, 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
@ -26,14 +26,23 @@
@key headful
@bug 8041470
@summary JButtons stay pressed after they have lost focus if you use the mouse wheel
@author Anton Nashatyrev
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.AWTEvent;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.concurrent.CountDownLatch;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class WheelModifier {
JFrame f;
@ -44,6 +53,9 @@ public class WheelModifier {
CountDownLatch releaseSema = new CountDownLatch(1);
volatile CountDownLatch wheelSema;
private volatile Point sLoc;
private volatile Dimension bSize;
void createGui() {
f = new JFrame("frame");
fb = new JButton("frame_button");
@ -98,10 +110,13 @@ public class WheelModifier {
r.waitForIdle();
System.out.println("# Started");
Point sLoc = fb.getLocationOnScreen();
Dimension bSize = fb.getSize();
SwingUtilities.invokeAndWait(() -> {
sLoc = fb.getLocationOnScreen();
bSize = fb.getSize();
});
r.mouseMove(sLoc.x + bSize.width / 2, sLoc.y + bSize.height / 2);
r.mousePress(MouseEvent.BUTTON1_MASK);
r.mousePress(MouseEvent.BUTTON1_DOWN_MASK);
pressSema.await();
System.out.println("# Pressed");
@ -119,7 +134,7 @@ public class WheelModifier {
wheelSema.await();
System.out.println("# Wheeled 2");
r.mouseRelease(MouseEvent.BUTTON1_MASK);
r.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK);
releaseSema.await();
System.out.println("# Released!");
}