似乎我在Mac OS X上一直髮現MouseMotion偵聽器的更多問題。我做了另一個小例子來說明問題。使JFrame最大化導致MouseMoved事件停止觸發
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
在this問題的答案JDK 1.7沒有爲我工作。事實上,接受答案上的測試用例在我的電腦上不起作用。
您的代碼在我的Windows 7機器上正常工作。 1+來回答你的問題,讓我們拭目以待。 – 2014-10-11 03:04:10