2016-03-31 4 views
0

Ich habe 22 Stück Objekte (11 weiße Stücke und 11 schwarze Stücke). Sie alle haben eine Farbe und einen Buchstaben. Ich muss all diese Objekte mit einem Bild zu einer HBox in javafx hinzufügen.JavaFX Code Duplikation

Ich habe den folgenden Code, das funktioniert:

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

Wie Sie eine Menge Doppelarbeit zu sehen ist, und ich habe mich gefragt, wie diese zu beheben. Ich habe versucht, die folgendes zu tun:

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

Aber dieser Code noch zieht 22 Stück in jeder HBox, was nicht erlaubt sein sollte. (normal, weil es 22 Sechsecke zieht).

Antwort

1

Erstellen Sie eine Hilfsmethode für ein einzelnes Stück, nicht für mehrere Stücke. Im Moment durchläuft Ihre Version der Methode die Liste der Teile und fügt sie unabhängig von der Farbe hinzu, was offensichtlich nicht das ist, was Sie wollen.

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