У меня есть пример приложения, которое рисует изображения с помощью GraphicsContext
и работает, как показано на рисунках ниже.Выбор и перемещение изображения холста с помощью MouseEvent и MouseClicked в JavaFX
И вопрос к выбрать и движение только blue circle
горизонтально с Canvas
MouseEvent
и MouseClicked
public class JavaFXTest extends Application {
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Canvas canvas = new Canvas(300,100);
GraphicsContext gc = canvas.getGraphicsContext2D();
Stop[] stops;
LinearGradient gradient;
// outer circle
stops = new Stop[]{new Stop(0, Color.LIGHTSKYBLUE), new Stop(1, Color.BLUE)};
gradient = new LinearGradient(0.5, 0, 0.5, 1, true, CycleMethod.NO_CYCLE, stops);
gc.setFill(gradient);
gc.fillOval(10, 14, 40, 40);
gc.fill();
gc.stroke();
// Inner circle
stops = new Stop[]{new Stop(0, Color.BLUE), new Stop(1, Color.LIGHTSKYBLUE)};
gradient = new LinearGradient(0, 0, 1, 1, true, CycleMethod.NO_CYCLE, stops);
gc.setFill(gradient);
gc.fillOval(13, 17, 34, 34);
gc.fill();
gc.stroke();
root.getChildren().add(canvas);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
И вот результат:
можно выберите blue circle
в canvas
с canvas.setOnMouseClicked
и переместить в горизонтальный с canvas.setOnMouseMoved
, не знает позиция от blue circle
? -
canvas.setOnMouseMoved((MouseEvent e) -> {
});
canvas.setOnMouseClicked((MouseEvent e) -> {
});
Этот вид вещь обычно проще, если вы просто узел s на графике сцены (https://docs.oracle.com/javase/8/javafx/scene-graph-tutorial/scenegraph.htm#JFXSG107), а не на холсте. Если вы решили использовать узлы Scene Graph Nodes, вот [пример того, как перемещать узлы вокруг] (http://stackoverflow.com/questions/27080039/proper-way-to-move-a-javafx8-node- вокруг). – jewelsea