我是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);
}
}
您是否尝试过将这样一些代码放入handleMouse方法这样简单的方法?
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.BLUE);
gc.fillRect(event.getX()-5,event.getY()-5,10,10);
这当然假设您还将此方法附加到画布,以便您实际获得正确坐标系中的事件。