<Swing Dev> Mouse click cause MOUSE_EXITED and MOUSE_ENTERED event on macOS

dmitry markov dmitry.markov at oracle.com
Mon Apr 17 19:22:17 UTC 2017


Hi Reto,

I guess, the problem you observed and JDK-8050478 
<https://bugs.openjdk.java.net/browse/JDK-8050478> may have the same 
root cause. The fix for JDK-8050478 
<https://bugs.openjdk.java.net/browse/JDK-8050478> was integrated into 
jdk9-b137 and jdk8u152 (not released yet). I recommend that you checked 
jdk9-b137 or higher to find out whether the issue is dupe of JDK-8050478 
<https://bugs.openjdk.java.net/browse/JDK-8050478> or not.

Regards,
Dmitry
On 12/04/2017 16:16, Reto Merz wrote:
> Hi,
>
> We have found out that a simple mouse click cause a MOUSE_EXITED and MOUSE_ENTERED on macOS in contrary to Windows.
> This happen only when the click is performed on a dialog with a frame (owner) behind it.
> It seems that the frame in the background cause the bug.
>
> Steps to reproduce:
>      1. start reproducer (source below) -> a frame is opened with a button "Open dialog"
>      2. click on "Open dialog" -> a white dialog is opened, this dialog must overlay the frame
>      3. click in the white dialog -> see console output
>
> Note that the reproducer logs mouse events to the console
> (it might be useful to disable line wrapping in macOS terminal with "rput rmam").
>
> On Windows the click cause this events (as expected):
>      java.awt.event.MouseEvent[MOUSE_PRESSED,(164,113),absolute(1942,763),button=1,modifiers=Button1,extModifiers=Button1,clickCount=1]
>      java.awt.event.MouseEvent[MOUSE_RELEASED,(164,113),absolute(1942,763),button=1,modifiers=Button1,clickCount=1]
>      java.awt.event.MouseEvent[MOUSE_CLICKED,(164,113),absolute(1942,763),button=1,modifiers=Button1,clickCount=1]
>
> On macOS (10.12.3) the click also cause MOUSE_EXITED and MOUSE_ENTERED:
>      java.awt.event.MouseEvent[MOUSE_PRESSED,(130,134),absolute(820,501),button=1,modifiers=Button1,extModifiers=Button1,clickCount=1]
>      java.awt.event.MouseEvent[MOUSE_EXITED,(130,134),absolute(820,501),button=0,modifiers=Button1,extModifiers=Button1,clickCount=0]
>      java.awt.event.MouseEvent[MOUSE_ENTERED,(130,134),absolute(820,501),button=0,modifiers=Button1,extModifiers=Button1,clickCount=0]
>      java.awt.event.MouseEvent[MOUSE_RELEASED,(130,134),absolute(820,501),button=1,modifiers=Button1,clickCount=1]
>      java.awt.event.MouseEvent[MOUSE_CLICKED,(130,134),absolute(820,501),button=1,modifiers=Button1,clickCount=1]
>
> Both tested with the latest public Java 8 release (from java.com):
>      java -version
>          java version "1.8.0_121"
>          Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
>          Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
>
> Why we get an additional MOUSE_EXITED and MOUSE_ENTERED on macOS?
> It this a (known) bug or should we report this via bugreport.java.com?
>
> Thanks
> Reto
>
> Reproducer:
>
> import javax.swing.JButton;
> import javax.swing.JDialog;
> import javax.swing.JFrame;
> import javax.swing.JPanel;
> import javax.swing.JTable;
> import javax.swing.WindowConstants;
> import java.awt.BorderLayout;
> import java.awt.EventQueue;
> import java.awt.event.MouseEvent;
>
> public class MouseExited {
>    public static void main(String[] args) throws Throwable {
>      EventQueue.invokeAndWait(() -> {
>        JFrame frame = new JFrame();
>        frame.setSize(500, 500);
>        frame.setLocationRelativeTo(null);
>        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
>
>        JButton button = new JButton("Open dialog");
>        button.addActionListener(e -> {
>          JTable table = new JTable() {
>            @Override
>            protected void processMouseEvent(final MouseEvent e) {
>              System.out.println(e.toString());
>            }
>          };
>          JPanel dialogPane = new JPanel(new BorderLayout());
>          dialogPane.add(table);
>          JDialog dialog = new JDialog(frame);
>          dialog.setContentPane(dialogPane);
>          dialog.setModal(true);
>          dialog.setSize(300, 300);
>          dialog.setLocationRelativeTo(null);
>          dialog.setVisible(true);
>        });
>
>        JPanel framePane = new JPanel(new BorderLayout());
>        framePane.add(button);
>        frame.setContentPane(framePane);
>        frame.setVisible(true);
>      });
>    }
> }
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20170417/96e715bc/attachment.html>


More information about the swing-dev mailing list