我想用一个新的TitledPane系列重新填充Accordion,但我发现在手风琴中扩展节点时遇到了问题。
我猜这是JavaFX库的一个问题。因为sample provided in the manual for Accordion and TitledPane from Oracle也会发生这种情况。我采用原始的例子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时,标签会获取其值。我还添加了一个按钮,清除了手风琴中的所有TitledPane,创建了一个新的并将第一个TitledPane设置为Expanded。
因此,当我按下按钮时,手风琴被重新填充,标签上显示第一个TitledPane它已经扩展但最后一个它似乎被选中,但没有图像。这是第二次按下此按钮,或者我们之前选择了其中一个TitledPane。
这件事正是我想做的事情。清除所有TitledPane并用新的TitledPane重新填充它,它给出了同样奇怪的结果。
我如何清理所有TitledPane,创建一个新的并将第一个TitledPane设置为扩展而没有我之前解释的这种副作用?
感谢阅读!