提问者:小点点

如何在画布上画东西javafx


我是javafx的初学者:我正在使用javafx和Scene builder开发一个图形用户交互界面,它有一个带有x轴和y轴的坐标平面。它应该是这样的:https://postimg.cc/image/98k9mvnb3/当有人在这个坐标平面上点击任何地方时,它将显示控制台上像素的坐标点(x, y),并且在鼠标点击的同一个地方会有一个标记(比如点或一些文本)。

为了实现这些东西,我必须使用画布

这是我的代码:Controller Class包应用;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.canvas.Canvas;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
public class AxisController implements Initializable{
    @FXML
    private AnchorPane anchr;
    @FXML 
    private Canvas canvas;
    @Override
    public void initialize(URL location, ResourceBundle resources) {
         assert canvas != null : "fx:id=\"canvas\" was not injected: check your FXML file 'AxisFxml.fxml'.";
    }

    @FXML
    private void handleMouse(MouseEvent event){
        System.out.println(event.getX());
        System.out.println(event.getY());
    }   
}

主要班级:

package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
public class AxisMain extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            AnchorPane root = FXMLLoader.load(getClass().getResource("/application/AxisFxml.fxml"));
            Scene scene = new Scene(root,400,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

共1个答案

匿名用户

您是否尝试过将这样一些代码放入handleMouse方法这样简单的方法?

GraphicsContext gc = canvas.getGraphicsContext2D();

gc.setFill(Color.BLUE);
gc.fillRect(event.getX()-5,event.getY()-5,10,10);

这当然假设您还将此方法附加到画布,以便您实际获得正确坐标系中的事件。