Day-to-day the memorandum

やったことのメモ書きです。

JavaFXでタイトルバーのないウィンドウを移動させる方法

今回はJavaFXにてタイトルバーがないウィンドウを移動(下の画像)させる方法を忘れていたので、メモ用として残しておきます。

f:id:ZYPRESSEN:20160819080840g:plain

ソースコード

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Main extends Application {
    private double xOffset = 0;
    private double yOffset = 0;

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        //↓タイトルバーがないやつ
        primaryStage.initStyle(StageStyle.UNDECORATED);
        primaryStage.show();

        //マウス・ボタンが押されたとき
        root.setOnMousePressed(event -> {
            xOffset = event.getSceneX();
            yOffset = event.getSceneY();
        });
        //マウス・ボタンがドラッグされるとき
        root.setOnMouseDragged(event -> {
            primaryStage.setX(event.getScreenX() - xOffset);
            primaryStage.setY(event.getScreenY() - yOffset);
        });
    }


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

マウスが押されたとき、ウィンドウからのx座標を取得しておく。

マウスがドラッグされたとき、そのドラッグされている画面全体からのx座標から取得しておいたウィンドウからのx座標を引いて、その座標をステージのx座標にセットする。

日本語がおかしい気がしますが、後々いい表現が思いついたら修正します・・・

以上です。

余談

mp4からgif画像作るサイトがあったため、amareccoで動画をとってwoopieで変換して・・・ってやろうとしたらamareccoで撮った動画をwoopieでmp4に変換はどうもうまくいかないみたいです。
なのでわざわざaviutlでmp4に再エンコしなおしました。