JavaFx - как получить индекс массива кнопок, если значение одинаково - PullRequest
0 голосов
/ 08 ноября 2018

У меня проблема при попытке создать несколько кнопок с одинаковым значением «x». Как я могу исправить эту проблему или, возможно, получить значение кнопок, а затем удалить определенный элемент в массиве с тем же индексом, что и у моей кнопки, не удаляя другие элементы, когда она проходит по циклу for?

Button[] delButton = new Button[sizeOfIt]; //sizeOfIt is the size of array

for (int m=0; m <sizeOfIt; m++) {
    delButton[m]  = new Button("x");
}


for(int x = 0; x < delButton.length; x++) {                          
    delButton[x].setOnAction(new EventHandler<ActionEvent>() {     

        public void handle(ActionEvent event) {
        //  delete the element in the array with the same index as my button i clicked
        }
    });
}

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

@ azro пример идет в ногу с индексом, чтобы получить ссылку на Buttons.В этом примере используется actionEvent.getSource() для получения ссылки на Buttons.

import java.util.Arrays;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Control;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application
{
    int sizeOfIt = 10;

    @Override
    public void start(Stage primaryStage)
    {
        Button[] delButton = new Button[sizeOfIt]; //sizeOfIt is the size of array
        VBox vBox = new VBox();

        for (int m = 0; m < sizeOfIt; m++) {
            delButton[m] = new Button(m + "x");
            delButton[m].setOnAction(actionEvent -> {
                for (int i = 0; i < delButton.length; i++) {
                    if (delButton[i] != null && delButton[i].equals((Button) actionEvent.getSource())) {
                        vBox.getChildren().remove(delButton[i]);
                        delButton[i] = null;
                        System.out.println(Arrays.toString(delButton));
                    }
                }
            });
        }

        vBox.getChildren().addAll(delButton);
        vBox.setMaxSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE);

        StackPane root = new StackPane(vBox);
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    public static void main(String[] args)
    {
        launch(args);
    }
}
0 голосов
/ 08 ноября 2018

Вы могли бы справиться с этим, используя положение кнопки, она оставит пустое поле, где кнопка была:

for(int x = 0; x < delButton.length; x++) {     
    final index = x;                     
    delButton[x].setOnAction(new EventHandler<ActionEvent>() {     
        public void handle(ActionEvent event) {
            delButton[index] = null;
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...