TitledPane

JavaFX Region 类是所有 JavaFX 布局面板(如 Pane 等)的基类。JavaFX Region 类具有一组属性和特征,这些属性和特征由扩展了 Region 的所有 JavaFX 布局类共享。

Region类层次结构

图片.png

JavaFX 有许多类,它们基本上是 Axis、 Chart、 Control 和 Pane 的子类。所有这些也都是 Region 的间接子类,并且具有与 Region 相同的属性。

Region的属性

  • Background
  • Content Area
  • Padding
  • Borders
  • Margin
  • Region Insets

图片.png

Content Area 内容区域是布局容器将在其中绘制其子容器的位置。

Borders 边框是一行(或类似的) ,可以显示在内容区域的周围 + Region 的 padding。

Padding 是内容区域和边框之间的空隙区域。

Margin 是 Region 和它自己的父布局容器中的其他组件之间的空隙区域。

Set Padding

可以使用其 setPadding ()方法设置 JavaFX Region 或 Region 的子类的Padding。如下JavaFX HBox示例(并非所有的 Region 子类都复写了setPadding,比如 Pane),它也是 Region 的一个子类。下面是如何设置 HBox 的Padding:

HBox hBox = new HBox(new Label("Hello Pane"));
hBox.setPadding(new Insets(10));

Set Border

可以在 JavaFX Region 上设置边界。您可以同时使用标准笔划作为边框(线)或边框图像。边框图像可以用来围绕一个区域画一个画框——就像围绕一幅画的画框一样。不过,边框划线更为常见。

Set a Stroke Border

下面示例是一个在 Region 上设置边框的示例。在此示例中,使用的是 Region 子类 Pane。要理解“笔划线轮廓线”、“笔划线帽”等术语的含义,请查看我的 SVG 笔划教程。这两个概念(很可能)在 SVG 和 JavaFX 中的含义是相同的。

Pane  pane  = new Pane();

StrokeType     strokeType     = StrokeType.INSIDE;
StrokeLineJoin strokeLineJoin = StrokeLineJoin.MITER;
StrokeLineCap  strokeLineCap  = StrokeLineCap.BUTT;
double         miterLimit     = 10;
double         dashOffset     = 0;
List<Double>   dashArray      = null;

BorderStrokeStyle borderStrokeStyle =
        new BorderStrokeStyle(
                strokeType,
                strokeLineJoin,
                strokeLineCap,
                miterLimit,
                dashOffset,
                dashArray
        );


BorderStroke borderStroke =
        new BorderStroke(
                Color.valueOf("08ff80"),
                borderStrokeStyle,
                new CornerRadii(0),
                new BorderWidths(8)
        );

Border border = new Border(borderStroke);

pane.setBorder(border);

Set Background

您可以使用 JavaFX Background 类设置 JavaFX Region 的背景。在正确初始化它之前,它可能需要您对它进行一些干预。您可以设置两种颜色填充的背景,或使用图像作为背景。

Set Background Color

你可以像这样为 JavaFX Region 设置一个背景色:

Pane  pane  = new Pane();

BackgroundFill backgroundFill =
        new BackgroundFill(
                Color.valueOf("#ff00ff"),
                new CornerRadii(10),
                new Insets(10)
                );

Background background =
        new Background(backgroundFill);

pane.setBackground(background);

传递给 BackgroundFill 构造函数的 CornerRadii 实例设置背景填充的角的半径——如果需要圆角的话。如果没有,将角半径设置为0。传递给 BackgroundFill 构造函数的 Insets 实例设置 Region 边缘和背景填充之间的内部填充。可以将几个 BackgroundFill 实例叠加在一起应用。下面是一个如何做到的例子:

Pane  pane  = new Pane();

BackgroundFill backgroundFill1 =
        new BackgroundFill(
                Color.valueOf("#ff00ff"),
                new CornerRadii(0),
                new Insets(0)
                );

BackgroundFill backgroundFill2 =
        new BackgroundFill(
                Color.valueOf("#00ff00"),
                new CornerRadii(10),
                new Insets(10)
                );

Background background =
        new Background(backgroundFill1, backgroundFill2);

pane.setBackground(background);

在这个例子中,backgroundfill2将在 backgroundfill1之上绘制。由于 fill2具有角半径和填充设置,所以在后台 fill2的边缘可以看到。

Set Background Image

也可以使用图像作为 JavaFX 区域的背景。下面是一个使用图片作为区域(窗格)背景的例子:

Pane pane = new Pane();

String filePath = "data/background.jpg";
Image image = null;
try {
    image = new Image(new FileInputStream(filePath));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

BackgroundImage backgroundImage =
    new BackgroundImage(
        image,
        BackgroundRepeat.NO_REPEAT,  // repeat X
        BackgroundRepeat.NO_REPEAT,  // repeat Y
        BackgroundPosition.CENTER,   // position
        new BackgroundSize(
            100,   // width  = 100%
            100,   // height = 100%
            true,  // width is percentage
            true,  // height is percentage
            true,  // contain image within bounds
            true   // cover all of Region content area
        )
    );

pane.setBackground(new Background(backgroundImage));