以下类演示了FSEM中的MouseMotionListeners遇到的问题。

public class TestGUI extends JFrame {

Panel panel;

public TestGUI()
{
    panel = new Panel();
    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    gd.setFullScreenWindow(this);
    setVisible(false); // use the workaround to the Mac OS X FSEM bug where mouseMotionListeners don't work right away
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    getContentPane().add(panel);
    setVisible(true);
}

class Panel extends JPanel
{
    public Panel()
    {
        addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseMoved(MouseEvent e)
            {
                Toolkit.getDefaultToolkit().beep();
            }
        });
        setVisible(true);
    }
}

public static void main(String[] args) {
    new TestGUI();
}
}


问题是这样的:由于事件处理程序中的Toolkit.getDefaultToolkit().beep();调用,我可以清楚地听到mouseEvent触发时的声音。除了通常具有Mac OS X dock的屏幕区域之外,事件处理程序在大多数屏幕上都可以正常工作。我通过将扩展坞固定到屏幕的各个侧面来确认了这一点,并且“死区”更改为我将扩展坞固定在屏幕的一侧。有没有解决方法?

我的设置:

Java版本:1.7.0_55。

Mac OS X版本:10.8.5。

最佳答案

问题解决了。解决方法是在将帧undecorated(true);设置为全屏窗口之前立即对其进行设置。

public TestGUI()
{
    panel = new Panel();
    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    setUndecorated(true);
    gd.setFullScreenWindow(this);
    setVisible(false); // use the workaround to the Mac OS X FSEM bug where mouseMotionListeners don't work right away
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    getContentPane().add(panel);
    setVisible(true);
}


也许在码头前有一些看不见的,没有窗户的东西。

关于java - MouseMotionListener事件不会在屏幕的某些区域触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24664664/

10-14 16:28
查看更多