Java 在矩形网格内单击鼠标添加球体
每当我在矩形内单击时,我想添加一个球体。基本上,我已经使用矩形制作了这个9X6网格。附件是我的代码,我不知道在ActionEventHandler中添加什么Java 在矩形网格内单击鼠标添加球体,java,javafx,Java,Javafx,每当我在矩形内单击时,我想添加一个球体。基本上,我已经使用矩形制作了这个9X6网格。附件是我的代码,我不知道在ActionEventHandler中添加什么 public void Settings(ActionEvent event) throws Exception { Stage primaryStage = new Stage(); Parent root = FXMLLoader.load(getClass().getResource("/application/
public void Settings(ActionEvent event) throws Exception
{
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("/application/Settings.fxml"));
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
@FXML
ObservableList<Integer> comboList = FXCollections.observableArrayList(3,4,5,6,7,8);
ObservableList<String> gridList = FXCollections.observableArrayList("9 X 6","15 X 10");
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
// TODO Auto-generated method stub
combo.setItems(comboList);
gridb.setItems(gridList);
}
public void Grid() throws Exception {
Stage primaryStage=new Stage();
//AnchorPane root = new AnchorPane();
Group root = new Group();
Scene scene = new Scene(root);
//scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
Rectangle r = null;
for(int i=0;i<9;i++) {
for(int j=0;j<6;j++) {
r = new Rectangle(70*j,70*i,70,70);
r.setStroke(Color.BLUE);
root.getChildren().add(r);
}
}
scene.setRoot(root);
primaryStage.show();
scene.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent me) -> {
if(me.getButton().equals(MouseButton.PRIMARY)) {
Circle circle = new Circle(me.getX(), me.getY(), 10, Color.BLUE);
addEventHandler(root, circle);
root.getChildren().add(circle);
}
});}
private void addEventHandler(Group parent, Node node) {
// TODO Auto-generated method stub
node.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent me) -> {
if(me.getButton().equals(MouseButton.SECONDARY)) {
parent.getChildren().remove(node);
}
});
}
公共无效设置(ActionEvent)引发异常
{
阶段primaryStage=新阶段();
父根=fxmloader.load(getClass().getResource(“/application/Settings.fxml”);
场景=新场景(根,400400);
scene.getStylesheets().add(getClass().getResource(“application.css”).toExternalForm());
初级阶段。场景(场景);
primaryStage.show();
}
@FXML
ObservableList comboList=FXCollections.observableArrayList(3,4,5,6,7,8);
ObservableList gridList=FXCollections.observableArrayList(“9 X 6”,“15 X 10”);
@凌驾
公共void初始化(URL arg0,ResourceBundle arg1){
//TODO自动生成的方法存根
combo.setItems(组合列表);
设置项(gridList);
}
public void Grid()引发异常{
阶段primaryStage=新阶段();
//锚烷根=新锚烷();
组根=新组();
场景=新场景(根);
//scene.getStylesheets().add(getClass().getResource(“application.css”).toExternalForm());
初级阶段。场景(场景);
矩形r=null;
对于(int i=0;i{
if(me.getButton().equals(MouseButton.SECONDARY)){
parent.getChildren().remove(节点);
}
});
}
如果我使用
scene.addEventHandler(MouseEvent.MOUSE_单击,(MouseEvent me)
此代码,那么我可以添加圆(或球体)在任意位置随机单击网格线。我只想为特定矩形创建一个球体。您可以将事件处理程序添加到单个矩形
s,或者使用MouseEvent
的pickResult
属性检查是否单击了矩形
:
public static Rectangle getIntersectedRect(MouseEvent event) {
Node n = event.getPickResult().getIntersectedNode();
return (n instanceof Rectangle) ? (Rectangle) n : null;
}
谢谢,这对我帮助很大。但是有一个小问题,在最后一个矩形(即最后一行和最后一列)中,单击它会添加多个圆,而不是只添加一个。
scene.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent me) -> {
if(me.getButton().equals(MouseButton.PRIMARY)) {
Rectangle rect = getIntersectedRect(me);
if (rect != null) {
Circle circle = new Circle(rect.getX()+35, rect.getY()+35, 10, Color.BLUE);
addEventHandler(root, circle);
root.getChildren().add(circle);
}
}
});}