是否可以完全删除 TitledPane 的标题?
我设法在 css 文件中使用以下代码使其不可见:
.titled-pane > .title{
-fx-background-color: rgba(0, 100, 0, 0.0);
-fx-font-size: 0;
}
但它仍然占用空间,当我将鼠标悬停在它上面时,光标会发生变化。更改填充也没有帮助。
基本上,我只需要 TitledPane 的可展开/可折叠功能,这些功能在按下按钮时执行。
title
是HBox
。这样我们就可以查找它并隐藏它:
Platform.runLater(new Runnable() {
@Override
public void run() {
Pane title = (Pane) titledPane.lookup(".title");
if (title != null) {
title.setVisible(false);
}
}
});
它应该在场景构建和渲染后
Platform.runLater(...)
运行。
有点旧,但你也可以通过 CSS 来做到这一点。 鉴于您的 titledPane 有 id filterTitledPane,您可以:
#filterTitledPane .title {
-fx-pref-height: 1;
}
#filterTitledPane .title .text {
visibility: false;
}
如果不需要标题栏,可能就没有理由使用 TitledPane。
这就是我制作可折叠滚动窗格的方法:
var controlPanel = // whatever you want to become collapsible
var scrollPane = new ScrollPane(controlPanel);
scrollPane.setMinHeight(0); // remove default constraint
scrollPane.prefHeightProperty().set(0); // hide by default
var b = new Button("Toggle pane");
b.setOnAction(e -> {
// ScrollPane should either have it's content height, or 0
double target = scrollPane.getHeight() <= 0 ? scrollPane.getContent().prefHeight(-1)+5 : 0;
// gradually change scrollpane height to target value
KeyValue keyValue = new KeyValue(scrollPane.prefHeightProperty(), target);
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(500), keyValue));
timeline.play();
}