1

我想用新的 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 设置为扩展,而没有我之前解释过的这种副作用?

谢谢阅读!

4

0 回答 0