Как идентифицировать объект по его идентификатору - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь сделать линкоры.

У меня есть кнопка, после нажатия я хочу, чтобы кнопка и кнопка рядом с ней изменили цвет. (размещение на кораблях)

Я добавил идентификатор для каждого объекта, поэтому у меня есть уникальная строка, чтобы попытаться идентифицировать кнопки

Не могли бы вы показать мне теперь, чтобы идентифицировать объект на основе его идентификатора, а затем редактировать переменные в этом объекте?

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

1 Ответ

0 голосов
/ 15 мая 2019

Вы можете получить доступ к узлу, на который нажали, используя свойство 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);
            ...
        });
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...