2016-04-06 16 views
1

Ich habe multi-window java swing application mit drag&drop zwischen windows Unterstützung.Ist es möglich, den Mauszeiger beim Ziehen (ich meine Bild, nicht Position) von Swing zu ändern, wenn sich die Maus außerhalb des Anwendungsfensters befindet?

Ich möchte mouse cursorglobal ändern, auch wenn es zwischen application windows ist.

Die naheliegendste Lösung, die Component.setCursor() auf component genannt, die drag oder auf der Haupt window beginnt funktioniert nicht.

+0

* "Ziehen Ist es möglich, sich ändern Mauszeiger (Cursor) von Swing, wenn die Maus außerhalb des Anwendungsfensters ist? "* Nur mit Eingeborenen. @ f1sh Was war der Suchbegriff? War die Java-spezifische Lösung? –

+0

@ f1sh * ".. die Position der Maus in Java setzen?" * O_o Sie sollten mehr Zeit mit dem Lesen der Frage verbracht haben .. –

+0

@AndrewThompson Warum, was ist los mit der verknüpften Frage? Sagst du mir, dass '' Robot'' nicht erlaubt, die Maus in Java zu bewegen? – f1sh

Antwort

0

Dann einzige Weg, fand ich, dies zu tun, ohne mit nativen, plattformabhängigen api ist Java Swing DnD api zu verwenden, die Sie benutzerdefinierte Mauszeiger festlegen können, wenn

import javax.swing.*; 

import java.awt.Cursor; 
import java.awt.datatransfer.StringSelection; 
import java.awt.dnd.DnDConstants; 
import java.awt.dnd.DragGestureListener; 
import java.awt.dnd.DragSource; 

public class DndExample extends JFrame { 

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

    public DndExample() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel dragLabel = createDndLabel(); 
     getContentPane().add(dragLabel); 
     pack(); 
     setVisible(true); 
    } 

    private JLabel createDndLabel() { 
     JLabel label = new JLabel("Drag me, please"); 


     DragGestureListener dragGestureListener = (dragTrigger) -> { 
      dragTrigger.startDrag(new Cursor(Cursor.HAND_CURSOR), new StringSelection(label.getText())); 
     }; 

     DragSource dragSource = DragSource.getDefaultDragSource(); 
     dragSource.createDefaultDragGestureRecognizer(label, DnDConstants.ACTION_COPY, dragGestureListener); 

     return label; 
    } 
}