JavaFX:リージョン(ペイン)と共にシーングラフを使う

リージョン(ペイン)と共にシーングラフを使う

この方法が意外に思いつかないし、記述のあるウェブもなかなか見つけられない。わかってしまえば簡単だが。


import static java.lang.Math.*; import java.util.*; import javafx.animation.*; import javafx.application.*; import javafx.scene.*; import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.scene.paint.*; import javafx.scene.shape.*; import javafx.stage.*; public class GraphicsWithRegions extends Application { private Circle ball; private double direction; private Random random = new Random(); private double speed = 10; @Override public void start(final Stage primaryStage) { ball = new Circle(100, 100, 20); ball.setFill(Color.BLUE); direction = 2 * PI * random.nextDouble(); Group group = new Group(ball); Pane pane = new Pane(group); BorderPane border = new BorderPane(); border.setCenter(pane); border.setTop(new TextArea("top area")); border.setBottom(new TextField("bottom field")); final Scene scene = new Scene(border, 800, 600, Color.BLACK); primaryStage.setScene(scene); primaryStage.show(); ball.setCenterX(pane.getWidth() / 2); ball.setCenterY(pane.getHeight() / 2); new AnimationTimer() { @Override public void handle(long now) { double x = ball.getCenterX(); double y = ball.getCenterY(); double newDirection = random.nextDouble() * PI; if (y < 0) { direction = newDirection; } else if (pane.getWidth() < x) { direction = newDirection + PI * 0.5; } else if (pane.getHeight() < y) { direction = newDirection + PI; } else if (x < 0) { direction = newDirection + PI * 1.5; } ball.setCenterX(x + speed * cos(direction)); ball.setCenterY(y + speed * sin(direction)); } }.start(); } public static void main(String[] args) { launch(args); } }

参考

  • http://stackoverflow.com/questions/34160639/add-shapes-to-javafx-pane-with-cartesian-coordinates