如何在Java FX中创建多个可折叠窗格?

时间:2015-03-09 22:36:22

标签: javafx panes

如何在Java FX中创建多个可折叠窗格?

最终结果将是两个窗格,例如屏幕的右侧。如果一个是打开的,它占据右侧屏幕的三分之一。如果两者都打开,那么一个将填满右上角,另一个填充右下角。这不会导致每个窗格的内容缩小,但其中一些内容隐藏,用户可以向下滚动每个窗格以查看隐藏的内容。

可以通过单击屏幕上的按钮来打开/关闭每个。

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定我的描述是否正确,但这应该足以让你开始。对可折叠窗格使用TitledPane,并将它们放在可以均匀分布垂直空间的内容中,例如GridPaneRowConstraints。将GridPane放在BorderPane的右侧。

SSCCE:

import javafx.application.Application;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.RowConstraints;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TitledPaneInGridExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        GridPane grid = new GridPane();
        grid.add(createTitledPane("Pane 1"), 0, 0);
        grid.add(createTitledPane("Pane 2"), 0, 2);

        RowConstraints top = new RowConstraints();
        top.setValignment(VPos.TOP);
        top.setPercentHeight(100.0 / 3.0);

        RowConstraints middle = new RowConstraints();
        middle.setValignment(VPos.CENTER);
        middle.setPercentHeight(100.0 / 3.0);

        RowConstraints bottom = new RowConstraints();
        bottom.setValignment(VPos.BOTTOM);
        bottom.setPercentHeight(100.0 / 3.0);

        grid.getRowConstraints().addAll(top, middle, bottom);

        BorderPane root = new BorderPane(new Label("Content"), null, grid, null, null);
        primaryStage.setScene(new Scene(root, 800, 600));
        primaryStage.show();
    }

    private TitledPane createTitledPane(String title) {
        TitledPane expandable = new TitledPane();
        expandable.setText(title);
        VBox content = new VBox(5);
        for (int i=1; i<=20; i++) {
            content.getChildren().add(new Label("Item "+i));
        }
        ScrollPane scroller = new ScrollPane();
        scroller.setContent(content);
        expandable.setContent(scroller);
        expandable.setExpanded(false);
        return expandable ;
    }

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