我想用新的 TitledPane 集合重新填充 Accordion,但我发现在 Accordion 中扩展节点时出现问题。
我猜这是JavaFX库的问题。因为它也发生在 Oracle 的 Accordion 和 TitledPane 手册中提供的示例中。我采用原始示例 22-5,并将其更改为:
public void start(Stage stage) {
stage.setTitle("TitledPane");
Scene scene = new Scene(new Group(), 800, 250);
scene.setFill(Color.GHOSTWHITE);
final Label label = new Label("Initial");
// --- Accordion
final Accordion accordion = new Accordion ();
for (int i = 0; i < imageNames.length; i++) {
images[i] = new
Image(getClass().getResourceAsStream(imageNames[i] + ".jpg"));
pics[i] = new ImageView(images[i]);
tps[i] = new TitledPane(imageNames[i],pics[i]);
}
accordion.getPanes().addAll(tps);
accordion.expandedPaneProperty().addListener(new
ChangeListener<TitledPane>() {
public void changed(ObservableValue<? extends TitledPane> ov,
TitledPane old_val, TitledPane new_val) {
if (new_val != null) {
label.setText("expanded: " +accordion.getExpandedPane().getText());
}
}
});
HBox hbox = new HBox(10);
Button buttonClear = new Button("Clear and refill");
buttonClear.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
for (int i = 0; i < imageNames.length; i++) {
tps[i] = new TitledPane(imageNames[i]+" refill",pics[i]);
}
accordion.getPanes().clear();
accordion.getPanes().addAll(tps);
accordion.getPanes().get(0).setExpanded(true);
}
});
hbox.setPadding(new Insets(20, 0, 0, 20));
hbox.getChildren().setAll(label, accordion, buttonClear);
Group root = (Group)scene.getRoot();
root.getChildren().add(hbox);
stage.setScene(scene);
stage.show();
}
当我更改展开的 TitledPane 时,标签将采用其值。我还添加了一个按钮,清除 Accordion 中的所有 TitledPane,创建一个新的并将第一个 TitledPane 设置为 Expanded。
因此,当我按下按钮时,手风琴将被重新填充,标签显示 First TitledPane 它已扩展,但最后一个似乎已被选中,但没有图像。这会在我们第二次按下此按钮时发生,或者如果我们之前选择了 TitledPane 之一。
而这件事正是我想做的。清除所有 TitledPane 并用新的 TitledPane 重新填充它,它给出了同样奇怪的结果。
我怎样才能清理所有的 TitledPane,创建一个新的并将第一个 TitledPane 设置为扩展,而没有我之前解释过的这种副作用?
谢谢阅读!