JavaFX Region 类是所有 JavaFX 布局面板(如 Pane 等)的基类。JavaFX Region 类具有一组属性和特征,这些属性和特征由扩展了 Region 的所有 JavaFX 布局类共享。
JavaFX 有许多类,它们基本上是 Axis、 Chart、 Control 和 Pane 的子类。所有这些也都是 Region 的间接子类,并且具有与 Region 相同的属性。
Content Area 内容区域是布局容器将在其中绘制其子容器的位置。
Borders 边框是一行(或类似的) ,可以显示在内容区域的周围 + Region 的 padding。
Padding 是内容区域和边框之间的空隙区域。
Margin 是 Region 和它自己的父布局容器中的其他组件之间的空隙区域。
可以使用其 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));
可以在 JavaFX Region 上设置边界。您可以同时使用标准笔划作为边框(线)或边框图像。边框图像可以用来围绕一个区域画一个画框——就像围绕一幅画的画框一样。不过,边框划线更为常见。
下面示例是一个在 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);
您可以使用 JavaFX Background 类设置 JavaFX Region 的背景。在正确初始化它之前,它可能需要您对它进行一些干预。您可以设置两种颜色填充的背景,或使用图像作为背景。
你可以像这样为 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的边缘可以看到。
也可以使用图像作为 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));