JavaFX代码重复



我有22个片段对象(11个白色片段和11个黑色片段)。它们都有一种颜色和一个字母。我需要将所有这些带有图像的对象添加到javafx中的HBox中。

我有以下代码可以工作:

public void draw(){
    Paint border;
    Paint fill;
    for (Piece piecesObjects : pieces){
        Group group = new Group();
        Hexagon hexagon = new Hexagon();
        if (piecesObjects.isWhite()){
            border = Color.WHITE;
            fill = Color.BLACK;
            ImageView imageView = new ImageView("/hive/imagesPieces/b/" + piecesObjects.getPiece() + ".png");
            group.getChildren().addAll(hexagon,imageView);
            whitePieces.getChildren().add(group);
        } else {
            border = Color.BLACK;
            fill = Color.WHITE;
            ImageView imageView = new ImageView("/hive/imagesPieces/w/" + piecesObjects.getPiece() + ".png");
            group.getChildren().addAll(hexagon,imageView);
            blackPieces.getChildren().add(group);
        }
        hexagon.setStroke(border);
        hexagon.setFill(fill);
    }
}

正如你所看到的,有很多重复,我想知道如何解决这个问题。我试着做了以下事情:

 public void draw(HBox hbox){
    Paint border;
    Paint fill;
    for (Piece piecesObjects : pieces){
        Group group = new Group();
        Hexagon hexagon = new Hexagon();
        if (piecesObjects.isWhite()){
            border = Color.WHITE;
            fill = Color.BLACK;
        } else {
            border = Color.BLACK;
            fill = Color.WHITE;
        }
        hexagon.setStroke(border);
        hexagon.setFill(fill);
        ImageView imageView = new ImageView("/hive/imagesPieces/" + pieceObject.getColor() + "/" + piecesObjects.getPiece() + ".png");
        group.getChildren().addAll(hexagon,imageView);
        hBox.getChildren().add(group);
    }
}
public void drawWhitepieces(){
    draw(whitePieces);
}
public void drawBlackpieces(){
    draw(blackPieces);
}

但这个代码仍然在每个HBox中绘制了22个不应该允许的部分。(正常,因为它画了22个六边形)。

为单个工件而不是多个工件创建一个辅助方法。现在,你的方法版本会遍历碎片列表,并添加它们,而不考虑颜色,这显然不是你想要的。

private draw(Pane parent, Piece piece, Color stroke, String dir) {
    Hexagon hexagon = new Hexagon();
    hexagon.setStroke(stroke);
    hexagon.setFill(stroke.invert());
    ImageView imageView = new ImageView("/hive/imagesPieces/" + dir + "/" + piece.getPiece() + ".png");
    Group group = new Group(hexagon, imageView);
    parent.getChildren().add(group);
}
public void draw() {
    for (Piece piece : pieces) {
        if (piece.isWhite()){
            draw(whitePieces, piece, Color.WHITE, "b");
        } else {
            draw(blackPieces, piece, Color.BLACK, "w");
        }
    }
}

最新更新