在TitledPane中包装ListView而不获取滚动条

时间:2015-03-13 03:31:00

标签: listview javafx scrollbar

我一直试图弄清楚如何在TitledPane中包含ListView并让TitledPane扩展到ListView的整个高度而不生成滚动条。以下是我修改过的一些代码 JavaFX accordion with multiple open panes显示问题。当运行以下代码时,所有TitledPanes都会折叠,并且只有一个滚动条,但是当标题窗格打开时,会创建第二个或第三个滚动条,因为标题窗格不会展开以完全显示其内容。

有没有办法强制TitledPanes完全展示他们的内容?我唯一能想到的就是在每个titledpane上添加一个changelistener来抓住它的内容并加上所有的大小,但这很快就会得到非常凌乱和笨拙。我认为会有一个非常简单的解决方案,我只是看不到它。

package application;

import javafx.application.*;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class StackedPane extends Application {

    @Override
    public void start(Stage stage) {
        VBox stackedTitledPanes = createStackedTitledPanes();
        stackedTitledPanes.setPrefSize(410, 600);
        ScrollPane scroll = makeScrollable(stackedTitledPanes);
        scroll.setPrefSize(410, 600);

        stage.setTitle("Test Case");
        Scene scene = new Scene(scroll);
        stage.setScene(scene);
        stage.show();
    }

在这里,我创建顶级TitledPanes,并开始用更多titledpanes的列表视图填充它们

    private VBox createStackedTitledPanes() {
        final VBox stackedTitledPanes = new VBox();
        final ListView<TitledPane> listView = new ListView<>();
        for (int i = 0; i < 20; i++) {
            final TitledPane newPane = new TitledPane();
            newPane.setContent(createSubPane());
            newPane.setText("Pane " + i);
            listView.getItems().add(newPane);
            newPane.setExpanded(false);
        }
        stackedTitledPanes.getChildren().add(listView);
        VBox.setVgrow(listView, Priority.ALWAYS);
        return stackedTitledPanes;
    }

    private Node createSubPane() {
        final ListView<TitledPane> paneListView = new ListView<>();
        for (int i = 0; i < 20; i++) {
            final TitledPane subPane = new TitledPane();
            subPane.setText("SubPane " + i);

            final ListView<String> listView = new ListView<>();
            for (int j = 0; j < 20; j++) {
                listView.getItems().add("Item " + j);
            }
            subPane.setContent(listView);
            subPane.setExpanded(false);
            paneListView.getItems().add(subPane);
        }
        return paneListView;
    }

    private ScrollPane makeScrollable(final VBox node) {
        final ScrollPane scroll = new ScrollPane();
        scroll.setContent(node);
        return scroll;
    }

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

我还会添加一张照片,但我需要更多代表。感谢。

0 个答案:

没有答案