【发布时间】:2014-12-06 06:43:07
【问题描述】:
我似乎不断发现 Mac OS X 上的 MouseMotion 侦听器存在更多问题。我制作了另一个小示例来说明问题。
public class TestGUI extends JFrame {
Panel panel;
public TestGUI()
{
setSize(1000, 600);
setLocationRelativeTo(null);
panel = new Panel();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(panel);
setVisible(true);
}
class Panel extends JPanel
{
private Point mouseLocation = new Point();
public Panel()
{
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e)
{
mouseLocation = e.getPoint();
repaint();
}
});
setVisible(true);
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLACK);
g.drawString("(" + mouseLocation.x + "," + mouseLocation.y + ")", 100, 100);
}
}
public static void main(String[] args) {
new TestGUI();
}
}
我不确定这是否发生在 windows 上,因为我目前无法访问 windows 计算机,但在 OS X 上会发生以下情况:
单击绿色“+”以最大化窗口会使窗口最大化,从而使鼠标指针回到画布区域。但是,如果您不单击,则说明鼠标位置的文本将停止更新。
我知道这不是窗口失去焦点:我通过在面板中添加一个 focusAdapter 并在方法中添加一个 System.out.println() 来检查这一点。
我在 Mac OS X 10.8.5 上使用 JDK 1.7
this 问题中的答案对我不起作用。事实上,接受答案的测试用例在我的电脑上不起作用。
【问题讨论】:
-
您的代码在我的 Windows 7 机器上运行良好。 1+ 到您的问题,让我们拭目以待,看看会以这种方式得到什么答案。
标签: java macos swing mouseevent