top / index / prev / next / target / source

2012-09-14 diary: [JavaFX] DragAndDrop ドロップのサンプル

いがぴょんの日記 日記形式でつづる いがぴょんコラム ウェブページです。

[JavaFX] DragAndDrop ドロップのサンプル

<Sample001.java>

package sample;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.DataFormat;
import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.paint.Color;
import javafx.scene.shape.ClosePath;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;

/**
 * ドロップする JavaFX 2 サンプル
 */
public class Sample001 extends Application {
    @Override
    public void start(final Stage primaryStage) {
        primaryStage.setTitle("Drop target");

        final Group root = new Group();

        {
            final Path path = new Path();
            root.getChildren().add(path);
            path.getElements().addAll(new MoveTo(10, 10), new LineTo(50, 195), new LineTo(325, 150),
                    new LineTo(375, 50), new LineTo(10, 10), new ClosePath());
            path.setFill(Color.YELLOW);
            path.setStroke(Color.YELLOWGREEN);
            path.setStrokeWidth(5);
        }

        root.setOnDragOver(new EventHandler<DragEvent>() {
            @Override
            public void handle(final DragEvent event) {
                final Dragboard db = event.getDragboard();
                for (DataFormat df : db.getContentTypes()) {
                    if (df.equals(DataFormat.FILES)) {
                        System.out.println("ドラッグオーバー: ファイル: " + event.getDragboard().getFiles().get(0).toString());
                        event.acceptTransferModes(TransferMode.COPY);
                        break;
                    }
                    if (df.equals(DataFormat.PLAIN_TEXT)) {
                        System.out.println("ドラッグオーバー: 平分テキスト: " + event.getDragboard().getString());
                        event.acceptTransferModes(TransferMode.COPY);
                        break;
                    }
                }
                event.consume();
            }
        });

        root.setOnDragDropped(new EventHandler<DragEvent>() {
            @Override
            public void handle(final DragEvent event) {
                final Dragboard db = event.getDragboard();
                // 未解明事項: Dragboard の DataFormat は、処理してほしいものから順にセットされているかどうか。
                for (DataFormat df : db.getContentTypes()) {
                    if (df.equals(DataFormat.FILES)) {
                        primaryStage.setTitle("Dropped: " + db.getFiles().get(0).toString());
                        event.setDropCompleted(true);
                        break;
                    }
                    if (df.equals(DataFormat.PLAIN_TEXT)) {
                        primaryStage.setTitle("Dropped: " + db.getString());
                        event.setDropCompleted(true);
                        break;
                    }
                }
                event.consume();
            }
        });

        primaryStage.setScene(new Scene(root, 400, 200));
        primaryStage.show();
    }

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

登場キーワード


この日記について