javafx перетаскивание значков по умолчанию

я хочу соединить 2 фигуры линией, пока нажата мышь. Как говорится в документе, я не могу использовать для этого модель нажатого-перетаскиваемого-освобождения, поэтому следует использовать метод перетаскивания - все выглядит нормально, но как отключить значки по умолчанию, в которых говорится, что содержимое перетаскивания разрешено помещать в цель ? на mouseMove я рисую линию, и мне не нужны эти значки по умолчанию.

Я включаю простую программу, показывающую это - просто запустите, я попробую перетащить один круг на другой.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package onreleased;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.*;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

/**
*
* @author mmk
*/
public class DaDIcons extends Application {

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");


        final Label label = new Label("started");
        label.setLayoutY(100);

        Pane pane = new Pane();
        Circle red = createCircle(40, 40, 30, Color.RED, label);
        Circle blue = createCircle(160, 40, 30, Color.BLUE, label);

        pane.setOnDragOver(new EventHandler<DragEvent>() {

            @Override
            public void handle(DragEvent event) {

                System.out.println("foo");

            }
        });

        pane.getChildren().addAll(red, blue, label);

        primaryStage.setScene(new Scene(pane, 300, 250));
        primaryStage.show();
    }

    private Circle createCircle(double x, double y, double r, final Color color, final Label statusLabel) {

        final Circle circle = new Circle(x, y, r);
        circle.setFill(color);

        circle.setOnDragOver(new EventHandler<DragEvent>() {

            @Override
            public void handle(DragEvent event) {
                statusLabel.setText(color.toString() + " over");
                System.out.println("foo");
                if (event.getGestureSource() != circle) {


                    event.acceptTransferModes(TransferMode.ANY);
                }
            }
        });

        circle.setOnDragDropped(new EventHandler<DragEvent>() {

            @Override
            public void handle(DragEvent arg0) {
                statusLabel.setText(color.toString() + " dropped");
            }
        });

        circle.setOnDragDetected(new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent arg0) {
                circle.startDragAndDrop(TransferMode.ANY);
                Dragboard db = circle.startDragAndDrop(TransferMode.ANY);

                /*
                * Put a string on a dragboard
                */
                ClipboardContent content = new ClipboardContent();
                content.putString("foo");
                db.setContent(content);


                statusLabel.setText(color.toString() + " xxxxxxxxxxxxxxxxxxxxxxx");
            }
        });

        circle.setOnDragEntered(null);

        return circle;

    }
}

person Michał Króliczek    schedule 15.04.2012    source источник


Ответы (1)


Вы можете управлять Cursor в действиях перетаскивания.
В circle.setOnDragDetected() действии установите circle.setCursor(Cursor.NONE); и,
в circle.setOnDragDropped() действии, измените его circle.setCursor(Cursor.DEFAULT);.
Вместо отображения значков курсора вы можете показывать изображение в координатах мыши, пока д-н-падение.

person Uluk Biy    schedule 16.04.2012
comment
Так как это не сработало? Это исключение? Отключение курсора не соответствует вашим потребностям? Ответ требует дополнительных пояснений? - person Uluk Biy; 16.04.2012
comment
Параметр Cursor.NONE не влияет на каждое событие перетаскивания — он по-прежнему остается по умолчанию. Тем временем я нашел javafx-jira.kenai.com/browse/RT-20326 поэтому, возможно, я использую onMousePressed на родительском узле, и я проверю, что дочерний узел был нажат/отпущен;/ - person Michał Króliczek; 16.04.2012
comment
Извините, либо вопрос вводит в заблуждение, либо я неправильно его понял. В моем проекте я также использовал перетаскивание. Элементы панели инструментов представляли собой кнопки с изображениями, которые помещались в сетку панели инструментов. При перетаскивании курсор отключается, и вместо него отображается изображение перетаскиваемой кнопки с использованием изображения. Настоящим Curser.NONE может работать в разных случаях и при различных обстоятельствах. - person Uluk Biy; 17.04.2012