如何在javaFX中扩展多个Accledion的TitledPane?

时间:2014-07-01 12:02:59

标签: java javafx accordion expandable

我的手风琴有多个titledPane,并且在titledPane的ListView面板中有很多数据。我只是想在搜索数据时扩展所有名为“手风琴”的歌曲。我不知道该怎么做。任何想法?

在这里,我附上了我的真实项目的屏幕截图,它显示了我想要做的事情。

enter image description here

2 个答案:

答案 0 :(得分:7)

快速回答:你不能。

Accordion有一个expandedPane属性,即一个TitledPaneAccordion无法拥有多个展开的窗格。

相反,您可以直接使用多个TitledPane(在VBox或类似内部),以获得所需的行为。不幸的是,这看起来不像Accordion,因为TitledPane默认使用不同的样式。但是通过一些自定义CSS(查看caspian.css以了解手风琴的样式),您可以使其看起来就像Accordion中的窗格一样。

稍微多做一些工作,你就可以把它变成你自己的"多选手风琴"控制,以便于重复使用。

答案 1 :(得分:3)

像哈拉尔德说的那样。你不能。但是你可以在另一个Container中使用多个TitledPane。例如VBox。试试这段代码。

import java.util.ArrayList;
import java.util.Collection;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.TextArea;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TitledPanes extends Application {

    public static void main(String [] args){ launch(args); }

    @Override
    public void start(Stage primaryStage) throws Exception {

        HBox root = new HBox();

        VBox noaccordion = new VBox();
        noaccordion.getChildren().addAll(this.createPanes());

        VBox yesaccordion = new VBox();
        Accordion acc = new Accordion();
        acc.getPanes().addAll(this.createPanes());
        yesaccordion.getChildren().add(acc);

        root.getChildren().addAll(noaccordion, yesaccordion);
        primaryStage.setScene(new Scene(root,800,400));
        primaryStage.show();
    }

    private Collection<TitledPane> createPanes(){
        Collection<TitledPane> result = new ArrayList<TitledPane>();
        TitledPane tp = new TitledPane();
        tp.setText("Pane 1");
        tp.setContent(new TextArea("Random text..."));
        result.add(tp);
        tp = new TitledPane();
        tp.setText("Pane 2");
        tp.setContent(new TextArea("Random text..."));
        result.add(tp);
        tp = new TitledPane();
        tp.setText("Pane 3");
        tp.setContent(new TextArea("Random text..."));
        result.add(tp);
        return result;
    }
}