以下课程演示了我在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。
答案 0 :(得分:0)
问题解决了。解决方案是在将帧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);
}
也许在码头前面有一些看不见的非窗口物。