analog_clock/AnalogClockSvg/src/analogclocksvg/AnalogClockSvg.java @ 99ef74b0
| dcb5e6b3 | TAKAHASHI, Toru | /*
|
||
* Copyright © 2014 TAKAHASHI,Toru
|
||||
*/
|
||||
package analogclocksvg;
|
||||
import javafx.application.Application;
|
||||
| 31775330 | TAKAHASHI, Toru | import javafx.application.Platform;
|
||
| dcb5e6b3 | TAKAHASHI, Toru | import javafx.fxml.FXMLLoader;
|
||
import javafx.scene.Parent;
|
||||
import javafx.scene.Scene;
|
||||
| 31775330 | TAKAHASHI, Toru | import javafx.scene.control.ContextMenu;
|
||
import javafx.scene.control.MenuItem;
|
||||
import javafx.scene.input.MouseButton;
|
||||
| 5194b17a | TAKAHASHI, Toru | import javafx.scene.paint.Color;
|
||
| dcb5e6b3 | TAKAHASHI, Toru | import javafx.stage.Stage;
|
||
| 5194b17a | TAKAHASHI, Toru | import javafx.stage.StageStyle;
|
||
| dcb5e6b3 | TAKAHASHI, Toru | |||
/**
|
||||
*
|
||||
* @author TAKAHASHI,Toru
|
||||
*/
|
||||
public class AnalogClockSvg extends Application {
|
||||
| 5194b17a | TAKAHASHI, Toru | private double dragStartX;
|
||
private double dragStartY;
|
||||
| f9413c1c | toru | private boolean isScrollStarted;
|
||
| 31775330 | TAKAHASHI, Toru | private ContextMenu popup = new ContextMenu();
|
||
| f9413c1c | toru | private Parent root;
|
||
| dcb5e6b3 | TAKAHASHI, Toru | @Override
|
||
public void start(Stage stage) throws Exception {
|
||||
| f9413c1c | toru | root = FXMLLoader.load(getClass().getResource("AnalogClock.fxml"));
|
||
| 5194b17a | TAKAHASHI, Toru | Scene scene = new Scene(root, 200, 200, Color.TRANSPARENT);
|
||
| 512a6aa9 | TAKAHASHI, Toru | // マウスのドラッグ操作でウィンドウを移動
|
||
| 5194b17a | TAKAHASHI, Toru | scene.setOnMousePressed(e -> {
|
||
dragStartX = e.getSceneX();
|
||||
dragStartY = e.getSceneY();
|
||||
});
|
||||
scene.setOnMouseDragged(e -> {
|
||||
stage.setX(e.getScreenX() - dragStartX);
|
||||
stage.setY(e.getScreenY() - dragStartY);
|
||||
});
|
||||
| f9413c1c | toru | // 時計のサイズを変更する
|
||
| 512a6aa9 | TAKAHASHI, Toru | // マウスのホイール操作でウィンドウサイズを変更
|
||
| f9413c1c | toru | scene.setOnScrollStarted(e -> isScrollStarted = true);
|
||
scene.setOnScrollFinished(e ->isScrollStarted = false);
|
||||
| 512a6aa9 | TAKAHASHI, Toru | scene.setOnScroll(e -> {
|
||
| f9413c1c | toru | if (isScrollStarted) return;
|
||
double zoomFactor = e.getDeltaY() > 0 ? 1.1 : 0.9;
|
||||
zoom(zoomFactor);
|
||||
});
|
||||
// タッチパネルのピンチ操作でウィンドウサイズを変更
|
||||
scene.setOnZoom(e -> {
|
||||
zoom(e.getZoomFactor());
|
||||
| 512a6aa9 | TAKAHASHI, Toru | });
|
||
// 右クリックでポップアップメニュー
|
||||
| 31775330 | TAKAHASHI, Toru | MenuItem exitItem = new MenuItem("exit");
|
||
exitItem.setOnAction(e -> Platform.exit());
|
||||
popup.getItems().add(exitItem);
|
||||
scene.setOnMouseClicked(e -> {
|
||||
if (e.getButton() == MouseButton.SECONDARY) {
|
||||
popup.show(stage, e.getScreenX(), e.getScreenY());
|
||||
}
|
||||
});
|
||||
| 5194b17a | TAKAHASHI, Toru | stage.initStyle(StageStyle.TRANSPARENT);
|
||
| dcb5e6b3 | TAKAHASHI, Toru | stage.setScene(scene);
|
||
stage.show();
|
||||
}
|
||||
| f9413c1c | toru | private void zoom(double factor) {
|
||
root.setScaleX(root.getScaleX() * factor);
|
||||
root.setScaleY(root.getScaleY() * factor);
|
||||
}
|
||||
| dcb5e6b3 | TAKAHASHI, Toru | /**
|
||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
launch(args);
|
||||
}
|
||||
}
|