Java 如何根据对象id识别对象

Java 如何根据对象id识别对象,java,javafx,Java,Javafx,我正在努力制造战舰 我有一个按钮,一旦点击,我想点击按钮和旁边的按钮都改变颜色。(放置在船舶上) 我已经为每个对象添加了一个id,所以我有一个唯一的字符串来尝试识别按钮 您现在能告诉我如何根据对象的id识别对象,然后编辑该对象中的变量吗 for(int x = 0; x < 10; x++) { for(int y = 0; y < 10; y++) { myrectangle r2 = new myrectangle(); r2.id

我正在努力制造战舰

我有一个按钮,一旦点击,我想点击按钮和旁边的按钮都改变颜色。(放置在船舶上)

我已经为每个对象添加了一个id,所以我有一个唯一的字符串来尝试识别按钮

您现在能告诉我如何根据对象的id识别对象,然后编辑该对象中的变量吗

for(int x = 0; x < 10; x++) 
{

    for(int y = 0; y < 10; y++) {
        myrectangle r2 = new myrectangle();

        r2.id = Integer.toString(x)+Integer.toString(y);

        r2.PosX = x;
        r2.PosY = y;

        r2.setX(30 * x);
        r2.setY(30 * y);
        r2.setWidth(30);
        r2.setHeight(30);

        r2.setY((y*30)+400);

        r2.setFill(Color.GRAY);
        r2.setStroke(Color.WHITE);
        group.getChildren().add(r2);
        r2.setOnMousePressed(event ->{
            MouseButton Button = event.getButton();
            r2.pressed = true;
            if(Button == MouseButton.PRIMARY) { //left button
                //make the ship go horizontally
                int boatSize;
                if(r2.ships == 8) {
                    boatSize = 5;
                    if((boatSize + r2.PosX) < 11) 
                    {
                        // boat fits
                        r2.setFill(Color.RED);
                        r2.used = true;

                    }
                    //display aircraft horizontally(5 tiles)
                }
                else if(r2.ships == 7 || r2.ships == 6) 
                {
                    //display battleship horizontally(4 tiles)
                }
                else if(r2.ships == 5 || r2.ships == 4) 
                {
                    //display destoryer horizontally(3 tiles)
                }
                else if(r2.ships <= 3) 
                {
                    //display patrole boat horizontally(2 tiles)
                }
            }
            if(Button == MouseButton.SECONDARY) { //right button
                //make the ship go vertically
                if(r2.ships == 8) {
                    //display aircraft vertically(5 tiles)
                }
                else if(r2.ships == 7 || r2.ships == 6) 
                {
                    //display battleship vertically(4 tiles)
                }
                else if(r2.ships == 5 || r2.ships == 4) 
                {
                    //display destoryer vertically(3 tiles)
                }
                else if(r2.ships <= 3) 
                {
                    //display patrole boat vertically(2 tiles)
                }
            }
        });

        if(r2.pressed == true) {
            r2.setFill(Color.BLUE);
        }


    }
}

root.getChildren().add(group);
stage.show();
for(int x=0;x<10;x++)
{
对于(int y=0;y<10;y++){
myrectangle r2=新的myrectangle();
r2.id=Integer.toString(x)+Integer.toString(y);
r2.PosX=x;
r2.PosY=y;
r2.setX(30*x);
r2.setY(30*y);
r2.设定宽度(30);
r2.设定高度(30);
r2.setY((y*30)+400);
r2.设置填充(颜色为灰色);
r2.设定行程(颜色为白色);
group.getChildren().add(r2);
r2.设置鼠标按下(事件->{
MouseButton-Button=event.getButton();
r2.1=真;
如果(Button==MouseButton.PRIMARY){//左按钮
//使船水平航行
国际船型;
如果(r2.1==8){
船型=5;
如果((船型+r2.PosX)<11)
{
//船适合
r2.设置填充(颜色为红色);
r2.used=true;
}
//水平显示飞机(5块)
}
else if(r2.ships==7 | | r2.ships==6)
{
//水平显示战列舰(4块)
}
else if(r2.ships==5 | | r2.ships==4)
{
//水平显示Destroyer(3个平铺)
}

否则,如果(r2.0)您可以通过使用事件对象的
source
属性来点击节点:

r2.setOnMousePressed(event -> {
    mybutton clickedButton = (mybutton) event.getSource();
    ...
});
另一方面,您可以访问事件处理程序中的所有最终和有效的最终局部变量,从而可以访问
r2
,甚至
x
y
,如果您创建它们的
final
副本:

for(int x = 0; x < 10; x++) {
    final finalX = x;
    for(int y = 0; y < 10; y++) {
        final finalY = y;
        ...
        r2.setOnMousePressed(event -> {
            System.out.println("X = " + r2.x);
            System.out.println("Y = " + finalY);
            ...
        });
        ...
    }
}
for(int x=0;x<10;x++){
最终结果x=x;
对于(int y=0;y<10;y++){
最终结果=y;
...
r2.设置鼠标按下(事件->{
System.out.println(“X=“+r2.X”);
System.out.println(“Y=“+finalY”);
...
});
...
}
}

您可以通过使用事件对象的
源属性来点击节点:

r2.setOnMousePressed(event -> {
    mybutton clickedButton = (mybutton) event.getSource();
    ...
});
另一方面,您可以访问事件处理程序中的所有最终和有效的最终局部变量,从而可以访问
r2
,甚至
x
y
,如果您创建它们的
final
副本:

for(int x = 0; x < 10; x++) {
    final finalX = x;
    for(int y = 0; y < 10; y++) {
        final finalY = y;
        ...
        r2.setOnMousePressed(event -> {
            System.out.println("X = " + r2.x);
            System.out.println("Y = " + finalY);
            ...
        });
        ...
    }
}
for(int x=0;x<10;x++){
最终结果x=x;
对于(int y=0;y<10;y++){
最终结果=y;
...
r2.设置鼠标按下(事件->{
System.out.println(“X=“+r2.X”);
System.out.println(“Y=“+finalY”);
...
});
...
}
}