Событие перетаскивания в Javafx 2.0 - PullRequest
1 голос
/ 07 марта 2012

Я работаю с javafx 2.0 и netbean 7.1. У меня возникла проблема при перетаскивании изображения поверх ImageView. Я сохранил изображение в качестве источника (одно изображение) и 2 целевой точки (2 поля какцелевая точка) .При попытке перетащить изображение в первый раз, оно работает нормально, и после того, как исходное изображение введено в целевое поле. И снова при попытке перетаскивания изображения возникает следующая ошибка.18x15 [1080]! = 0 "

После того, как изображение перемещено в целевой объект, мне нужно настроить слушателя на его изменение в качестве источника, я чувствую, что в этом месте возникла ошибка при бросании ..

код использую

public class DragandDropEx extends Application {

    /**
     * @param args the command line arguments
     */
    GridPane Board;
    ImageView deactivateImageView = new ImageView();
    ImageView newImageView = new ImageView();




    final Rectangle target = new Rectangle(0, 0, 50, 50);
    final Rectangle target2 = new Rectangle(0, 0, 50, 50);


    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        target.setFill(Color.CHOCOLATE);
        target2.setFill(Color.BLUE);
        Image image = new Image(getClass().getResourceAsStream("triangle.png"));
        getDeactivateImageView().setImage(image);
        Board = new GridPane();
        primaryStage.setTitle("Drag and Drop");



        createSource(getDeactivateImageView());



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

            @Override
            public void handle(DragEvent events) {
               events.acceptTransferModes(TransferMode.MOVE);
               events.consume();

                   createTargetDrop(target,0,8);
            }
        });
        target2.setOnDragOver(new EventHandler<DragEvent>() {

            @Override
            public void handle(DragEvent events) {
               events.acceptTransferModes(TransferMode.MOVE);
                events.consume();
                createTargetDrop(target2,0,9);
            }
        });






        Board.add(getDeactivateImageView(), 0, 1);
        Board.add(target, 0, 8);
        Board.add(target2, 0, 9);

        StackPane root = new StackPane();
        root.getChildren().add(Board);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }

    private void createSource(final ImageView imageView) {
       imageView.setOnDragDetected(new EventHandler<MouseEvent>() {
             @Override
            public void handle(MouseEvent events) {
                Dragboard storeImage =imageView.startDragAndDrop(TransferMode.MOVE);
                ClipboardContent content = new ClipboardContent();
                content.putImage(imageView.getImage());
                storeImage.setContent(content);                      **//  here i am getting error**
                events.consume();


            }
        });
    }

    private void createTargetDrop(final Rectangle target,final int xCordination,final int yCordination) {

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

            @Override
            public void handle(DragEvent event) {
                Dragboard db = event.getDragboard();
                Image dragedImage = db.getImage();
                getNewImageView().setImage(dragedImage);
                getDeactivateImageView().setVisible(false);
                setDeactivateImageView(getNewImageView());
                Board.add(getDeactivateImageView(),xCordination,yCordination );
                event.consume();
                createSource(getDeactivateImageView());                                         // setting listener to new image

            }
        });

    }
}

Ответы [ 3 ]

0 голосов
/ 26 апреля 2012

Я думаю, это о ссылках. Я имею в виду, что вы используете одну и ту же ссылку в другом месте. Может быть, вы должны использовать клон объекта. Я не смотрел на код глубоко, но похоже, что вы пытаетесь добавить один и тот же объект в другое место.

0 голосов
/ 05 июня 2014

Я бы порекомендовал JavaFX, потому что он включает в себя scenebuilder (GUI) для создания вашего GUI. Вы можете перетаскивать элементы графического интерфейса и масштабировать их на холсте. Затем создается файл FXML, который подключается к управляющему файлу Java.

Проверьте сценограф здесь: http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-info-2157684.html

Существует некоторая кривая обучения при подключении FXML к коду Java, но оно того стоит, если вы хотите графически разработать графический интерфейс.

0 голосов
/ 07 марта 2012

Какую версию JavaFX вы используете?

Вы можете включить проблему, которая была исправлена ​​в 2.1: http://javafx -jira.kenai.com / browse / RT-14348

Если вы работали с версией 2.0.x, вы можете попробовать версию FX2.1 для разработчиков: http://www.oracle.com/technetwork/java/javafx/downloads/devpreview-1429449.html

...