JavaFX 代码重复
JavaFX code duplication
我有 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");
}
}
}
我有 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");
}
}
}