我在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 gray border和http://docs.oracle.com/javafx/2/ui_controls/editor.htm
这行代码既不起作用
scrollPane.getStyleClass().add("noborder-scroll-pane");
由于
答案 0 :(得分:24)
在当前版本的JavaFX 8中,您可以使用边对边样式类来完全删除边框:
<ScrollPane styleClass="edge-to-edge"/>
答案 1 :(得分:16)
我找到了一个解决方案,并希望将其发布在此处,以便其他人不必浪费时间再找到它。
查看使用此命令从库中提取的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;
}
答案 2 :(得分:9)
首先尝试使用
.scroll-pane > .viewport {
-fx-background-color: transparent;
}
在设置背景颜色之前
答案 3 :(得分:7)
似乎有一个简单的解决方案,即使用&#34; -fx-background:rgb(80,80,80);&#34;,即
scrollPane.setStyle("-fx-background: rgb(80,80,80);");
至少这对我来说非常合适,而&#34; -fx-background-color:rgb(80,80,80);&#34;或&#34; -fx-control-inner-background:rgb(80,80,80);&#34;不适用于javafx 8.&#34; -fx-background-color:rgb(80,80,80);&#34;在早期版本的javafx中工作过。
答案 4 :(得分:2)
您可以使用:
-fx-background-color: transparent;
-fx-control-inner-background: transparent;
如果仅设置-fx-background-color
,您将看到颜色更改仅应用于ScrollPane的内边缘,并且中心区域的颜色仍未更改。
-fx-control-inner-background
属性将更改该中心区域的颜色。
答案 5 :(得分:1)
老实说,您的问题还不够清楚,但是我仅提供此答案以帮助他人。
导致此问题的原因是您拥有 ScrollPane ,并且其中包含一个绑定到 ScrollPane 的名为 viewport 的东西。您为 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");
答案 6 :(得分:0)
我更喜欢使用事件,而不是使用FXML或CSS,但这仅适用于具有内容的部分。如果您的scrollPane大于其内容,则还必须填充剩余空间。
scrollPane.getContent().setOnMousePressed(Event::consume);
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);