Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在矩形网格内单击鼠标添加球体_Java_Javafx - Fatal编程技术网

Java 在矩形网格内单击鼠标添加球体

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/

每当我在矩形内单击时,我想添加一个球体。基本上,我已经使用矩形制作了这个9X6网格。附件是我的代码,我不知道在ActionEventHandler中添加什么

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);
        }
    }
});}