如何在画布javafx上绘制一些东西

时间:2017-03-02 16:44:15

标签: java canvas javafx

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

为了实现这些东西,我必须使用canvas&我能够得到坐标点,但我没有得到如何绘制坐标平面以及如何在鼠标点击的像素上写点东西。

这是我的代码: 控制器类     包裹申请;

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 个答案:

答案 0 :(得分:0)

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

GraphicsContext gc = canvas.getGraphicsContext2D();

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

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