2017-05-12 3 views
0

Ich möchte einen Cursor in einem bestimmten Bereich von x- und y-Positionen verstecken. Hier ist ein Beispielcode, der darstellt, was ich tun möchte.Java-Cursor an beliebiger Stelle auf dem Bildschirm ausblenden

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

Nun, ich weiß, dass setCursor() auf ein bestimmtes Objekt angewendet werden kann, und das ist in Ordnung. Das funktioniert jedoch nicht für meine Zwecke.

Die einzige Ausnahme wäre, wenn ich irgendwie ein Vollbild-unsichtbares Objekt erstellen, in dem ich könnte setCursor verwenden könnte, auch wenn es wie so unsichtbar ist:

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()); 

(. Hinweis: Diese nicht funktionierte)

nur wiederholen, muss ich in der Lage sein setCursor() überall auf dem Bildschirm zu verwenden, nicht nur auf ein Objekt beschränkt, es sei denn ich einen unsichtbaren Bildschirm-Größe Objekt erstellen zu verwenden setCursor() in.

Update 1:

Ich denke, ich hätte ein bisschen klarer mit dem sein können, was ich tat. Ich habe eine Haupt JFrame in der Mitte des Bildschirms. Es braucht nicht den ganzen Bildschirm. Ich setze den Cursor auf einen leeren Cursor, wenn er sich in einer bestimmten Entfernung von der JFrame oder innerhalb der JFrame selbst befindet. Ich weiß jedoch nicht, wie ich das machen würde.

Meine Idee war vielleicht eine andere JFrame zu verwenden, die den ganzen Bildschirm einnimmt und dahinter unsichtbar ist, so dass ich setCursor() auf diesem JFrame verwenden kann. für den Raum außerhalb. Ich hoffe, dies verdeutlicht die Frage ein wenig mehr.

+0

Ich bezweifle, Java kann den Cursor steuern, wenn es außerhalb eines seiner Fenster ist. Angenommen, Sie machen den Vollbildmodus, wie werden Sie auf etwas klicken? – user1803551

+0

Ich habe weitere Informationen hinzugefügt. Ich hoffe das klärt es noch etwas auf. –

+0

Habe ich deine Frage beantwortet? – user1803551

Antwort

1

können Sie einen MouseMotionListener verwenden und seine mouseMoved Methode überschreiben, um zu überprüfen, wo die Maus (in den Komponenten) und setzen Sie den Cursor-Typen entsprechend:

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()); 
    } 
} 

Kredit dieser answer für den Trick eines leeren Cursor .

Sie können den Cursor nicht außerhalb eines Java-Fensters positionieren. Sie können mit Ihrer Idee von einem unsichtbaren, bildschirmfüllenden, kopflosen Rahmen gehen, aber das ist ziemlich dubios und wird auch alle Mausereignisse abfangen. Die Umsetzung wird gleich sein.

Verwandte Themen