设置边框大小

时间:2013-08-09 19:18:46

标签: javafx-2 javafx javafx-8

我想让边框的边框更加圆润和大胆。

我测试了这段代码:

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");

我得到了这个结果:

enter image description here

我如何解决这个问题?

1 个答案:

答案 0 :(得分:16)

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

不要使用-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-*属性更简单,效果更好。
  3. 示例代码

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

    buttonlike

    您可以复制并粘贴fxml和css,然后在SceneBuilder中加载它们以查看它的外观。

    按钮-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;
    }
    

    按钮-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布局文件,只是一个不同的样式表来实现不同的样式。

    imageicon

    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
    */