Java中的复合组件

时间:2016-04-18 16:44:12

标签: java user-interface javafx-8

我为一个单一项目制作一张战斗牌游戏(炉石)

" minion"船上的卡片有健康和攻击,并且这些卡片不断变化,我试图制作一个复合组件,它将成为一个中心ImageIcon,其中有两个"正方形"在左下角和右下角,代表卡片当前的生命值和攻击力,左上角代表卡片的成本,所有这些都代表StringProperty

对于如何处理这个问题,我真的很无能为力,也许甚至没有必要设置一个好的组件

这是一个炉石卡外观的示例:

enter image description here

1 个答案:

答案 0 :(得分:0)

使用StackPane。将图像放在底部,然后在顶部放置一个AnchorPane。在三个角中的每一个中放置一个Text,并将每个角的textProperty()绑定到一个StringProperties。像这样:

public class BattleCard extends Application {

private static Label label;

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Hello World!");
    label = new Label();
    label.setText("Waiting...");
    StackPane root = new StackPane();
    root.getChildren().add(new CardPane());
    primaryStage.setScene(new Scene(root, 350, 420));
    primaryStage.show();
}

public class CardPane extends StackPane {
    public CardPane() {
        ImageView cardImage = new ImageView(new Image("http://i.stack.imgur.com/1ljQH.png"));
        AnchorPane anchorPane = new AnchorPane();
        getChildren().addAll(cardImage, anchorPane);
        Text costText = new Text("Cost");
        Text healthText = new Text("Health");
        Text attackText = new Text("Attack");
        AnchorPane.setTopAnchor(costText, 0d);
        AnchorPane.setLeftAnchor(costText, 0d);
        AnchorPane.setBottomAnchor(healthText, 0d);
        AnchorPane.setLeftAnchor(healthText, 0d);
        AnchorPane.setBottomAnchor(attackText, 0d);
        AnchorPane.setRightAnchor(attackText, 0d);
        anchorPane.getChildren().addAll(costText, healthText, attackText);
    }
}

}