我一直试图弄清楚如何在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);
}
}
我还会添加一张照片,但我需要更多代表。感谢。