1

TitledPane の新しいコレクションでアコーディオンを補充したいのですが、アコーディオンでノードを展開するときに問題が発生しました。

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 を変更すると、ラベルはその値を取得します。また、アコーディオンのすべての TitledPane をクリアし、新しいものを作成して、最初の TitledPane を Expanded として設定するボタンも追加しました。

したがって、ボタンを押すと、アコーディオンが補充され、ラベルには、最初の TitledPane が展開されているが、最後の TitledPane は選択されているように見えますが、画像はありません。これは、このボタンを 2 回押すか、以前に TitledPane の 1 つを選択した場合に発生します。

そして、これはまさに私がやりたいことです。すべての TitledPane をクリアし、新しい TitledPane で再入力すると、同じ奇妙な結果が得られます。

前に説明したこの副作用なしに、すべての TitledPane を消去し、新しいものを作成して、最初の TitledPane を拡張として設定するにはどうすればよいですか?

読んでくれてありがとう!

4

0 に答える 0