2014-10-26 167 views
0

我正在爲Java中的繪圖應用程序創建自定義鼠標光標。該應用程序需要能夠在Windows上運行,並且由於與遊標大小(32 * 32像素)相關的窗口限制,不可能使用內置遊標功能。在Java中定製鼠標光標繪圖(swing)

我試圖使用MouseMotionListener在當前鼠標位置繪製圖像,並且在我將其繪製在空白麪板上時使用此圖像。圖像正確「跟隨」鼠標,所以這不是問題。

@Override 
public void paintComponent(Graphics g) {   
    super.paintComponent(g); 
    g.drawImage(cursorimage, x, y, null); 
} 

但是,當我向該面板添加子項時,鼠標光標顯示在子項後面。例如,當我添加幾個按鈕時,鼠標在按鈕後面顯示其圖像。我如何將光標圖像移動到前景?

我已經嘗試了一些東西像的paintComponent改變順序:

@Override 
public void paintComponent(Graphics g) {   
    g.drawImage(cursorimage, x, y, null); 
    super.paintComponent(g); 
} 

我也試着重寫其他塗料的方法,如paintChildren,paintComponents甚至paint方法本身,但似乎並沒有工作。該面板的其中一個子項也有一個drawComponent方法被覆蓋,我懷疑這也有影響。

+0

我可能在這裏完全錯了,但是最近我和另外一位程序員討論了將AWT和Swing結合使用時指出Z順序的問題。我不知道這個程序背後的代碼,但也許這可能與此有關? – DreadHeadedDeveloper 2014-10-26 18:28:22

+0

我還沒有看過。我一定會看到,如果這可能會導致我的問題。謝謝! – Hayeb 2014-10-26 22:39:28

回答

0

您需要在玻璃板作畫。如果您修改該源代碼,以便mouseMoved方法調用redispatchMouseEvent(e,true);如果您修改了該源代碼,則可以調用redispatchMouseEvent(e,true);如果修改該源代碼,則mouseMoved方法會調用redispatchMouseEvent(e,true);否則,紅點就像一個光標。

不幸的是,我發現這在運行Java 1.6的Mac上不起作用,但它適用於運行Java 1.8和Windows的Mac。