JavaFX: управление сеткой Connect 4 с помощью панели сетки - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь сделать Connect 4 в JavaFX. У меня несколько проблем с управлением запчастями. Первая проблема: когда я получаю содержимое панели сетки, в конце моего списка есть элемент с именем «группа», который имеет значение NULL, но я не знаю, откуда он взялся, поэтому мне приходится удалять его вручную. И вторая проблема: когда я нажимаю кнопку, часть появляется, но невозможно поместить другую часть друг на друга, и она исчезает в go в другом поле, когда я нажимаю на соответствующую кнопку. Не могли бы вы помочь мне решить эту проблему?

Элемент «группа» в моем списке

public class Connect4 extends Application {

private Stopwatch stopwatch;

private GridPane grid;

public static void main(String[] args) {
    launch(args);
}

public Scene connect4() {
    BorderPane connect4 = new BorderPane();
    //Top
    this.stopwatch = new Stopwatch();
    this.stopwatch.setFont(font("Segoe UI", FontWeight.BOLD, 25));
    this.stopwatch.setPrefHeight(80);
    BorderPane.setAlignment(this.stopwatch, Pos.CENTER);
    connect4.setTop(this.stopwatch);
    //Left
    VBox left = new VBox();
    left.setPrefWidth(200);
    connect4.setLeft(left);
    //Center
    this.grid = new GridPane();
    grid.setPrefSize(600, 700);
    grid.setStyle("-fx-grid-lines-visible: true ; -fx-border-width: 5 ; -fx-border-color: blue ; -fx-background-color: white");
    ImageView piece;
    for (int c = 0; c < 7; ++c) {
        for (int r = 0; r < 6; ++r) {
            //piece = new ImageView(new Image(new File("redPiece.png").toURI().toString()));
            piece = new ImageView();
            piece.setDisable(true);
            piece.setFitWidth(100);
            piece.setFitHeight(100);
            grid.add(piece, c, r);
        }
    }
    connect4.setCenter(grid);
    //Right
    VBox right = new VBox();
    right.setPrefWidth(200);
    connect4.setRight(right);
    //Bottom
    HBox colomnSelection = new HBox();
    colomnSelection.setAlignment(Pos.CENTER);
    colomnSelection.setSpacing(30);
    colomnSelection.setPrefHeight(120);
    Button rowButton;
    RowSelectionAction rowSelectionAction = new RowSelectionAction(this);
    for (int c = 0; c < 7; ++c) {
        rowButton = new Button(String.valueOf(c + 1));
        rowButton.setFont(font("Segoe UI", 15));
        rowButton.setPrefWidth(70);
        rowButton.setPrefHeight(30);
        rowButton.setOnAction(rowSelectionAction);
        colomnSelection.getChildren().add(rowButton);
    }
    BorderPane.setAlignment(colomnSelection, Pos.CENTER);
    connect4.setBottom(colomnSelection);
    //Scene
    return new Scene(connect4, 1100, 800);
}

public GridPane getGrid() {
    return this.grid;
}

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Connect 4");
    primaryStage.setScene(connect4());
    primaryStage.show();
    this.stopwatch.start();
    ObservableList<Node> childrens = grid.getChildren();
    for (Node node : childrens) {
        System.out.println(node);
        System.out.println(GridPane.getColumnIndex(node));
    }
}
}

public class RowSelectionAction implements EventHandler<ActionEvent> {

Connect4 connect4;

public RowSelectionAction(Connect4 connect4) {
    this.connect4 = connect4;
}

@Override
public void handle(ActionEvent actionEvent) {
    int colomnNumber = ((Button) (actionEvent.getSource())).getText().charAt(0) - 49;
    GridPane grid = this.connect4.getGrid();
    ObservableList<Node> childrens = grid.getChildren();
    List<Node> columnChildrens = new ArrayList<>();
    childrens.remove(42);
    for (Node node : childrens) {
        if (GridPane.getColumnIndex(node) == colomnNumber) {
            columnChildrens.add(node);
        }
    }
    Collections.reverse(columnChildrens);
    for (Node node : columnChildrens) {
        if (node.isDisable()) {
            ImageView piece = new ImageView(new Image(new File("redPiece.png").toURI().toString()));
            piece.setDisable(false);
            piece.setFitWidth(100);
            piece.setFitHeight(100);
            this.connect4.getGrid().add(piece, GridPane.getColumnIndex(node), GridPane.getRowIndex(node));
            break;
        }
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...