【问题标题】:Set border size设置边框大小
【发布时间】:2013-08-09 19:18:45
【问题描述】:

我想让边框窗格的边框更圆更粗。

我测试了这段代码:

bpi.setStyle("-fx-background-color: linear-gradient(to bottom, #f2f2f2, #d4d4d4);"
                + " -fx-border: 12px solid; -fx-border-color: white; -fx-background-radius: 15.0;"
                + " -fx-border-radius: 15.0");

我得到这个结果:

我该如何解决这个问题?

【问题讨论】:

    标签: javafx-2 javafx javafx-8


    【解决方案1】:

    为什么您当前的方法不起作用

    不要使用-fx-border(它甚至目前在 JavaFX CSS 中都不存在)。

    虽然还有其他fx-border-* 属性,例如-fx-border-color、-fx-border-width 和-fx-border-radius,但我也不推荐它们。

    建议的方法

    改为使用分层属性的组合:

    • -fx-background-color
    • -fx-background-insets
    • -fx-background-radius

    您可以在JavaFX CSS reference guide 中找到有关这些 CSS 属性特性的文档。

    虽然使用-fx-background-* 属性作为边框看起来很奇怪:

    1. 这是default JavaFX modena.css stylesheet 中所有边框的处理方式。
    2. 根据我的经验,当边框为圆形时,以这种方式应用边框比使用-fx-border-* 属性更简单,效果也更好。

    示例代码

    例如,这是一个示例 fxml 文件,它将“按钮之类的东西”的标准 modena.css 样式属性值应用于 BorderPane。 (modena.css 来自Java 8)。

    您可以复制并粘贴 fxml 和 css,然后将它们加载到 SceneBuilder 以查看它的样子。

    button-like.css

    .button-like {
      -fx-background-color: 
           -fx-shadow-highlight-color, 
           -fx-outer-border, 
           -fx-inner-border, 
           -fx-body-color;
      -fx-background-insets: 0 0 -1 0, 0, 1, 2;
      -fx-background-radius: 3px, 3px, 2px, 1px;
    }
    

    button-like.fxml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import java.lang.*?>
    <?import java.util.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.paint.*?>
    <?scenebuilder-stylesheet button-like.css?>
    
    <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity"
                minHeight="-Infinity" minWidth="-Infinity" prefHeight="131.0"
                prefWidth="196.0" xmlns:fx="http://javafx.com/fxml/1"
                xmlns="http://javafx.com/javafx/2.2">
      <children>
        <BorderPane layoutX="48.0" layoutY="26.0" prefHeight="79.0" prefWidth="100.0"
                    styleClass="button-like" 
        />
      </children>
    </AnchorPane>
    

    注意

    您实际上并不想在应用程序中应用上述确切样式来设置BorderPane 之类的样式,因为这不是“按钮之类的东西”。对不是按钮的东西使用相同的样式会使用户感到困惑。但是示例方法应该展示了分层背景以实现您想要的样式的一般想法。

    其他示例

    这个例子使用了上面定义的同一个FXML布局文件,只是不同的样式表实现了不同的样式。

    AnchorPane {
      -fx-background-color: #232732;
    }
    
    .button-like {
      -fx-outer-border: white;
      -fx-body-color: linear-gradient(to bottom, #FAFAFA, #EAEAEA);
      -fx-background-color: 
           -fx-outer-border, 
           -fx-body-color;
      -fx-background-insets: 0, 6;
      -fx-background-radius: 6px, 0px;
      -fx-background-image: url('http://icons.iconarchive.com/icons/appicns/simplified-app/64/appicns-Chrome-icon.png');
      -fx-background-repeat: no-repeat;
      -fx-background-position: center;
    }
    
    /**
    Icon license: Free for non-commercial use.
    Icon license Commercial usage: Not allowed
    Icon source: http://appicns.com
    */
    

    【讨论】:

    • 还有一个问题。我怎样才能使组件的边框看起来像这些面板forums.oracle.com/thread/2568400 我想增加边框的大小并使其变为白色。
    • @Peter 我在答案中添加了一个附加示例,以演示如何生成与您在评论中链接的样式相似的样式。一般方法与第一个类似按钮的示例没有什么不同 - 只是图层背景。
    • 来自 CSS 参考,你提到的链接是 -fx-border-color 属性。看docs.oracle.com/javafx/2/api/javafx/scene/doc-files/…。
    • @Mubasher 同意有一个 -fx-border-color 属性,我只是不建议在大多数应用程序中使用它,因为通常 -fx-background* 属性是更好的选择,特别是对于彼得的原始问题想要粗体圆形边框。
    • 我只想要底部边框,我如何在 javafx 中实现这一点
    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 2021-02-27
    • 2014-03-16
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    相关资源
    最近更新 更多