JavaFX复制窗格

时间:2016-05-01 14:59:09

标签: javafx duplicates

我有一个有2个玩家的游戏。当玩家轮到其他玩家时,其他玩家无法点击他的棋子(位于TilePane中)。当玩家进行游戏时,计数器会增加,因此很容易检查它的转弯。

public void switchPlayer() {
    if (this.counter % 2 == 0) {
        drawer.getBlackPane().getStyleClass().remove("play");
        drawer.getWhitePane().getStyleClass().add("play");
        drawer.getBlackPane().setDisable(true);
        drawer.getWhitePane().setDisable(false);
    } else {
        drawer.getWhitePane().getStyleClass().remove("play");
        drawer.getBlackPane().getStyleClass().add("play");
        drawer.getWhitePane().setDisable(true);
        drawer.getBlackPane().setDisable(false);
    }
}

css风格在Pane周围绘制绿色边框,其中包含玩家轮到它的碎片。

我怎么能避免这种重复?我想添加一个布尔值和一个Pane作为这个方法的参数,但我似乎无法解决这个问题。

2 个答案:

答案 0 :(得分:2)

只需将play css类替换为disabled伪类(请参阅CSS reference)。

E.g。 (假设您已将player-pane类添加到黑色和白色窗格中):

.player-pane {
     /* style for active player pane */
}

.player-pane:disabled {
     /* style for inactive player pane */
}

您还可以使用布尔变量(+否定)来设置disable属性:

public void switchPlayer() {
    boolean whiteTurn = (this.counter % 2 == 0);

    drawer.getBlackPane().setDisable(whiteTurn);
    drawer.getWhitePane().setDisable(!whiteTurn);
}

答案 1 :(得分:1)

你可以做到

private void updateTurns(Node active, Node inactive) {
    inactive.getStyleClass().remove("play");
    active.getStyleClass().add("play");
    inactive.setDisable(true);
    active.setDisable(false);
}

然后

public void switchPlayer() {
    if (this.counter % 2 == 0) {
        updateTurns(drawer.getWhitePane(), drawer.getBlackPane());
    } else {
        updateTurns(drawer.getBlackPane(), drawer.getWhitePane());
    }
}