【问题标题】:JavaFX ScrollPane border and backgroundJavaFX ScrollPane 边框和背景
【发布时间】:2013-07-06 13:58:27
【问题描述】:

我在 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 borderhttp://docs.oracle.com/javafx/2/ui_controls/editor.htm

这行代码也不行

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

谢谢

【问题讨论】:

标签: javafx-2 scrollpane


【解决方案1】:

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

<ScrollPane styleClass="edge-to-edge"/>

【讨论】:

  • 非常好的发现。它没有记录在 JavaFX CSS reference 中,但它是 JavaFX 8 的默认 modena.css 样式表的一部分。
【解决方案2】:

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

通过查看使用此命令从库中提取的 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;
}

【讨论】:

  • 正在尝试“-fx-background-color:透明”,但“边框”仍然让我烦恼,所以我找到了你的答案。谢谢你,先生! :)
【解决方案3】:

先试试这个

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

设置背景色之前

【讨论】:

  • 虽然投票率较高的解决方案对我不起作用,但这个解决方案可以!
【解决方案4】:

似乎有一个简单的解决方案,就是使用“-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 中确实有效。

【讨论】:

    【解决方案5】:

    你可以使用:

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

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

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

    【讨论】:

      【解决方案6】:

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

      导致此问题的原因是您有 ScrollPane,并且在其中有一个名为 viewport 的东西,它绑定到 ScrollPane。您为 ScrollPane 对象应用的属性不适用于 viewport。如果您想为两个 ONLY 而不是子级应用属性,则必须使用 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");
      

      【讨论】:

      • 我可以确认这是使用透明颜色,而其他答案只能设置不透明颜色,因为它们正在更改 ScrollPane 样式。
      【解决方案7】:

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

      scrollPane.getContent().setOnMousePressed(Event::consume);
      scrollPane.setFitToHeight(true);
      scrollPane.setFitToWidth(true);
      

      【讨论】:

        猜你喜欢
        • 2012-10-05
        • 2017-03-08
        • 1970-01-01
        • 2017-09-19
        • 1970-01-01
        • 2015-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多