2016-05-01 68 views
0

我有一個遊戲與2名球員。當輪到玩家時,其他玩家不能點擊他的棋子(位於TilePane中)。當玩家進行遊戲時,計數器會增加,因此很容易檢查它的轉向。JavaFX複製窗格

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風格在面板周圍繪製一個綠色邊框,其中輪到它的是玩家的棋子。

我怎樣才能避免這種重複?我想爲這個方法添加一個布爾值和一個窗格作爲參數,但我似乎無法像這樣修復它。

回答

2

只需更換與disabled僞類的play CSS類(見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

你可以做

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