JavaFX ScrollPane边框和背景

时间:2013-07-09 04:49:13

标签: javafx-2 scrollpane

我在ScrollPane的默认背景和边框方面遇到了一些问题。 使用这种风格使问题更加清晰。

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

Image show the background and the border

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

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

Image show the background and the border after my best work around

我查看了这篇旧帖子JavaFX Hide ScrollPane gray borderhttp://docs.oracle.com/javafx/2/ui_controls/editor.htm

这行代码既不起作用

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

由于

7 个答案:

答案 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);