考え方はMOUSE_CLICKEDにボールを描くことです そして、その中心から始まる行をMOUSE_DRAGGEDハンドラで解放するまで描きます。 しかしそれは反対に完了し、私は単にそれを得ることはありません - それは最初の行を描画し、マウスをリリースした後、ボールが表示されます。 誰に問題がどこにあるのか分かりませんか?ここでJavaFX。ボールを描いてその中心から線を引く
public class Step extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Canvas layer1 = new Canvas(500, 500);
Group root = new Group();
root.getChildren().add(layer1);
Ball c_ball = new Ball(0, 0, 50, 0, 0);
Arrow arrow = new Arrow(0, 0, 0, 0);
layer1.addEventHandler(MouseEvent.MOUSE_CLICKED,
ev -> {
c_ball.x = ev.getX();
c_ball.y = ev.getY();
arrow.start_x = ev.getX();
arrow.start_y = ev.getY();
GraphicsContext gc = layer1.getGraphicsContext2D();
gc.setFill(Color.DARKCYAN);
gc.fillOval(c_ball.x - c_ball.size/2, c_ball.y - c_ball.size/2, c_ball.size, c_ball.size);
});
layer1.addEventHandler(MouseEvent.MOUSE_DRAGGED,
ev -> {
GraphicsContext gc_arr = layer1.getGraphicsContext2D();
gc_arr.clearRect(0, 0, layer1.getWidth(), layer1.getHeight());
gc_arr.strokeLine(arrow.start_x, arrow.start_y, ev.getX(), ev.getY());
});
Scene scene = new Scene(root, 500, 500);
stage.setScene(scene);
stage.show();
}
}
は、クラスのボールです:
public class Ball {
public double x, y;
public double dx, dy;
public double size;
public Ball(double x, double y, double size, double dx, double dy) {
this.x = x;
this.y = y;
this.size = size;
this.dx = dx;
this.dy = dy;
}}
そして、あなたが表示されますMouseEvent.MOUSE_CLICKEDのドキュメントを見てみると
public class Arrow {
public double start_x, start_y;
public double end_x, end_y;
public Arrow(double x1, double y1, double x2, double y2) {
this.start_x = x1;
this.start_y = y1;
this.end_x = x2;
this.end_y = y2;
}}
「ボール」クラスと「アロー」クラスを提供できますか? – aKilleR
@aKilleRは説明にそれらを追加しました – Diana
私はこの正確な問題を解決することができましたが、複数の行が必要な場合は動作しません。あなたが望むなら、答えとしてコードを掲示することができます。これは次のようになります:https://imgur.com/a/vkwBW。最初のボールラインのペアを描画した後、 'clearRect'のために別のラインを描画しようとします – Sunflame