14

我对 ScrollPane 的默认背景和边框有一些问题。使用这种风格可以让问题更清晰。

setStyle("-fx-background-color:blue; -fx-border-color:crimson;");

图像显示背景和边框

我试过这种风格,但没有运气,只有红色边框消失了,留下了蓝色边框。

setStyle("-fx-background-color:blue; -fx-background-insets:0; -fx-border-color:crimson; -fx-border-width:0; -fx-border-insets:0;");

图片显示了我最好的工作后的背景和边框

我看过这篇旧帖子JavaFX Hide ScrollPane grayborderhttp://docs.oracle.com/javafx/2/ui_controls/editor.htm

这行代码也不起作用

scrollPane.getStyleClass().add("noborder-scroll-pane");

谢谢

4

7 回答 7

29

在当前版本的 JavaFX 8 中,您可以使用 edge-to-edge 样式类来完全移除边框:

<ScrollPane styleClass="edge-to-edge"/>
于 2015-03-31T19:02:56.283 回答
20

我找到了一个解决方案,并希望将其发布在这里,这样其他人就不需要浪费时间再次找到它了。

通过查看使用此命令从库中提取的 JavaFx (caspian.css) 的默认 css。

jar xf jfxrt.jar com/sun/javafx/scene/control/skin/caspian/caspian.css

我可以看到我错过的那个是

-fx-padding: 0;

所以这是我正在使用的css类。

.scroll-pane {
    -fx-background-insets: 0;
    -fx-padding: 0;
}

.scroll-pane:focused {
    -fx-background-insets: 0;
}

.scroll-pane .corner {
    -fx-background-insets: 0;
}
于 2013-07-09T05:13:48.233 回答
11

先试试这个

.scroll-pane > .viewport {
   -fx-background-color: transparent;
}

设置背景颜色之前

于 2016-03-24T10:57:42.387 回答
9

似乎有一个简单的解决方案,就是使用“-fx-background:rgb(80,80,80);”,即

scrollPane.setStyle("-fx-background: rgb(80,80,80);");

至少这对我来说非常有效,而“-fx-background-color: rgb(80,80,80);” 或“-fx-control-inner-background: rgb(80,80,80);” 在 javafx 8 中不起作用。“-fx-background-color: rgb(80,80,80);” 在早期版本的 javafx 中确实有效。

于 2014-03-30T11:52:41.810 回答
2

您可以使用:

-fx-background-color: transparent;
-fx-control-inner-background: transparent;

如果设置 only -fx-background-color,您将看到颜色更改仅应用于 ScrollPane 的内边缘,并且中心区域的颜色仍然没有更改。

-fx-control-inner-background属性将更改该中心区域的颜色。

于 2014-01-25T05:22:33.750 回答
2

老实说,您的问题还不够清楚,但我只是在可能的情况下提供此答案以帮助他人。

导致这个问题的原因是你有ScrollPane并且在它里面有一个叫做viewport的东西,它绑定到ScrollPane您为ScrollPane对象应用的属性不适用于视口。如果你想同时应用属性,而不是子元素,你必须使用stylesheet属性,而不是style属性本身,它使用内联 css 代码。例如,如果要使ScrollPane透明,则必须为两者应用属性,假设文件名为“scrollPane.css”,如下所示:

#mainScrollPane > .viewport {
    -fx-background-color: transparent;
}

#mainScrollPane {
    -fx-background-color: transparent;
}

但是,您需要为ScrollPane对象应用特殊的 Id 属性,因此它不适用于子对象:

  ScrollPane scrollPane = new ScrollPane(root);
  scrollPane.setId("mainScrollPane");
  scrollPane.getStyleSheets().add("scrollPane.css");
于 2020-02-13T15:44:44.047 回答
0

我更喜欢使用事件而不是使用 FXML 或 CSS,但这仅适用于具有内容的部分。如果您的 scrollPane 大于其内容,您还必须填充剩余空间。

scrollPane.getContent().setOnMousePressed(Event::consume);
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
于 2019-12-18T22:05:42.650 回答