2017-05-12 113 views
0

我希望將光標隱藏在x和y位置的某個範圍內。以下是一些代表我想要做的示例代碼。將Java光標隱藏在屏幕上的任何位置

if(x >= xLowerBound && x <= xUpperBound + 600 && y >= yLowerBound + 20 && y <= yUpperBound + 600) 
    setCursor(blankCursor); 
else 
    setCursor(Cursor.getDefaultCursor()); 

現在,我知道setCursor()可以應用到某個對象,那就是罰款。但是,這不適合我的目的。

唯一的例外是,如果我能以某種方式創建一個全屏無形的對象,其中我可以用setCursor即使它是無形的,像這樣:

JFrame hiddenWindow = new JFrame(); 
hiddenWindow.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize()); 
hiddenWindow.setExtendedState(JFrame.MAXIMIZED_BOTH); 

if(x >= xLowerBound && x <= xUpperBound && y >= yLowerBound && y <= yUpperBound) 
    hiddenWindow.setCursor(blankCursor); 
else 
    hiddenWindow.setCursor(Cursor.getDefaultCursor()); 

(注意:這不工作)

只是重申,我需要能夠使用setCursor()在屏幕任意位置,而不是僅僅侷限於一個物體上,除非我可以創造一個無形的屏幕大小的物體使用setCursor()

更新1:

我想我可以更清楚我的所作所爲。我在屏幕中央有一個主要的JFrame。它不佔用整個屏幕。我將光標設置爲空白光標,只要它與JFrameJFrame本身相距一定距離。但是,我不知道我會怎麼做。

我的想法是或許使用另一個JFrame,它佔用了整個屏幕,並且隱藏在它後面,因此我可以在JFrame上使用setCursor()。爲它外面的空間。我希望這能更清楚地說明這個問題。

+0

我懷疑當它位於其窗口之外時,Java可以控制光標。因此,假設您將畫面全屏顯示,您將如何點擊任何內容? – user1803551

+0

我增加了一些信息。我希望能再澄清一點。 –

+0

我回答你的問題了嗎? – user1803551

回答

1

可以使用MouseMotionListener並覆蓋其mouseMoved方法來檢查,其中小鼠是(在組件)並相應地設置光標類型:

public class Test extends JFrame { 

    Test() { 
     final int x1 = 100, y1 = 100, x2 = 300, y2 = 300; 

     BufferedImage cursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB); 
     Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(cursorImg, new Point(0, 0), "blank cursor"); 
     Cursor defaultCursor = new Cursor(Cursor.DEFAULT_CURSOR); 

     addMouseMotionListener(new MouseAdapter() { 

      @Override 
      public void mouseMoved(MouseEvent e) { 
       int x = e.getX(); 
       int y = e.getY(); 
       if (x > x1 && x < x2 && y > y1 && y < y2) 
        setCursor(blankCursor); 
       else 
        setCursor(defaultCursor); 
      } 
     }); 

     setSize(new Dimension(400, 400)); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> new Test()); 
    } 
} 

信用此answer爲空白光標的特技。

您不能將遊標設置在Java窗口之外。你可以將你的想法變成一個無形的,全屏幕,無頭框架,但這非常不禮貌,還會攔截所有的鼠標事件。實施將是相同的。