我想要获得的示例,用Java代码编写:
public class Main extends Application {
private static Scene scene;
public static void main(String[] args) {
launch(args);
}
@Override
public void init() throws IOException {
// Load root pane from FXML file.
URL url = getClass().getResource("sample.fxml");
StackPane root = FXMLLoader.load(url);
// Create scene for a root node on JavaFX thread.
Platform.runLater(() -> scene = new Scene(root, 600, 400));
}
@Override
public void start(Stage stage) {
stage.setScene(scene);
stage.show();
}
}
自定义节点:
public class CustomGroup extends Group {
private VBox contentPane = new VBox();
public CustomGroup() {
getChildren().add(contentPane);
contentPane.getChildren().add(new Label("First Label"));
contentPane.getChildren().add(new Label("Second Label"));
}
}
FXML:
<StackPane>
<CustomGroup/>
</StackPane>
上面的代码是我想要获得的代码的示例,但我不想在Java代码中添加标签,而是想在FXML中添加它们。这样的事情:
<StackPane>
<CustomGroup>
<Label text="First Label"/>
<Label text="Second Label"/>
</CustomGroup>
</StackPane>
但这会为自定义组添加标签。我想将它们添加到自定义组的内容窗格(VBox)。
答案 0 :(得分:3)
虽然,我不确定你为什么要在CustomGroup
的构造函数中将标签添加到VBox中,但我会忽略它并回答你的问题。
您可以添加单独的方法将项目添加到VBox
。让我们考虑一下方法:
setItems()
接受Nodes
将其添加到VBox getItems()
从VBox ObservableList<Node>
<强> CustomGroup 强>
public class CustomGroup extends Group {
private VBox contentPane = new VBox();
public CustomGroup() {
getChildren().add(contentPane);
contentPane.getChildren().add(new Label("First Label"));
contentPane.getChildren().add(new Label("Second Label"));
}
public void setItems(Node...nodes) {
contentPane.getChildren().addAll(nodes);
}
public ObservableList<Node> getItems() {
return contentPane.getChildren();
}
}
<强> FXML 强>
<CustomGroup>
<items>
<Button text="hi"/>
</items>
</CustomGroup>
此FXML在VBox
。