JavaFXでタイトルバーのないウィンドウを移動させる方法
今回はJavaFXにてタイトルバーがないウィンドウを移動(下の画像)させる方法を忘れていたので、メモ用として残しておきます。
ソースコード
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に再エンコしなおしました。