top / index / prev / next / target / source

2012-09-13 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.ClipboardContent;
import javafx.scene.input.DataFormat;
import javafx.scene.input.Dragboard;
import javafx.scene.input.MouseEvent;
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("Drag figure");

    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(175, 150), new LineTo(195, 50),
          new LineTo(10, 10), new ClosePath());
      path.setFill(Color.YELLOW);
      path.setStroke(Color.YELLOWGREEN);
      path.setStrokeWidth(5);
    }

    root.setOnDragDetected(new EventHandler<MouseEvent>() {
      @Override
      public void handle(final MouseEvent event) {
        System.out.println("ドラッグが開始されました。クリップボードに内容をセットします。");
        final Dragboard db = root.startDragAndDrop(TransferMode.COPY);
        final ClipboardContent content = new ClipboardContent();
        content.put(DataFormat.PLAIN_TEXT,
            "ドラッグされた図形ですが、ここではべたテキストへとダウングレードしています。");
        db.setContent(content);
        event.consume();
      }
    });

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

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

独自フォーマットの登録方法

独自フォーマットは以下のように利用するとのことです。MIME 風の指定にするのが JavaFX 推奨形式とのことです。

独自フォーマットの登録方法

  public static final DataFormat myFormat = new DataFormat(
      "x-myapp/data");

ドラッグ時のデータ設定方法

        content.put(myFormat, "何か独自形式のデータ");

登場キーワード


この日記について