javafx布局类Pane

本文介绍 JavaFX 中 Pane 的使用方法,包括继承关系、添加子节点、设置节点位置及大小等基本操作,并展示了如何通过样式设置美化界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承关系:

java.lang.Object

  • javafx.scene.Node
    • javafx.scene.Parent
      • javafx.scene.layout.Region
        • javafx.scene.layout.Pane

子类:

AnchorPane, BorderPane, FlowPane, GridPane, HBox, StackPane, TilePane, VBox

Pane是java最基本的布局类,它可以直接使用
public class TestPane extends Application{

	public static void main(String[] args) {
		launch();
	}
	public void start(Stage primaryStage) throws Exception {	
		Pane pane=new Pane();
		Scene scene=new Scene(pane);
	
		primaryStage.setWidth(500);
		primaryStage.setHeight(500);
		primaryStage.setScene(scene);
		primaryStage.setTitle("TestPane");
		primaryStage.show();
	}

}

在这里插入图片描述

添加子节点(Node)

pane的子节点都放在一个可观察列表中(ObservableList <Node>),通过getChildren()方法获取该列表,向列表中添加节点即可。

	Button button=new Button ("button");
	pane.getChildren().add(button);

在这里插入图片描述

布局上会将所有节点放在(0,0)位置,后面的会覆盖前面的
	Button button=new Button ("button");
	pane.getChildren().add(button,new Button ("button2"));

在这里插入图片描述

如果将button放大,则可以看到它:

	Button button=new Button ("button");
	button.setFont(Font.font("sans-serif",40));
	pane.getChildren().add(button,new Button ("button2"));

在这里插入图片描述

节点可设置布局位置:

	Button button=new Button ("button");
	button.setFont(Font.font("sans-serif",40));
	button.setLayoutX(100);
	button.setLayoutY(100);
	pane.getChildren().add(button,new Button ("button2"));

在这里插入图片描述

Pane的大小可以设置初始值,前提是其父节点未有明确指定大小

		pane.setPrefHeight(200);
		pane.setPrefWidth(200);
		//	primaryStage.setWidth(300);
    	//	primaryStage.setHeight(300);

在这里插入图片描述

如果父节点有明确指定大小,pane将适应父节点;

		pane.setPrefHeight(200);
		pane.setPrefWidth(200);
		primaryStage.setWidth(300);
    	primaryStage.setHeight(300);

在这里插入图片描述
Pane的属性监听器

	pane.widthProperty().addListener(listener);

Pane的样式可以通过setStyle方法设置
在这里插入图片描述

	pane.setStyle("-fx-background:red;");

也可以用css修改,以下是官网链接:
https://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html#scatterchart

当然Pane也可以设置透明度,透明度也将作用于子节点

	pane.setOpacity(0.5);

在这里插入图片描述

<think>我们正在回答用户关于JavaFX Pane组件的问题。根据引用,我们知道Pane是一个布局容器,可以组织和管理其他节点。我们将按照以下结构回答: 1. 介绍Pane的基本概念 2. 展示示例代码(使用用户提供的引用中的代码) 3. 解释代码关键部分 4. 提供相关问题 注意:用户要求使用中文,并且所有数学表达式用$...$格式(但这个问题中可能没有数学表达式,所以忽略),独立公式用$$...$$(同样,这里可能没有)。同时,在回答末尾生成相关问题。 根据引用[1]:Pane是一个重要的布局容器;引用[2]:JavaFX是构建富客户端应用的平台;引用[3]:有一个使用Pane的代码示例,该示例展示了如何将一个圆绑定到面板中心。 因此,我们的回答如下:</think>### JavaFX Pane 组件的使用教程 PaneJavaFX 中最基础的布局容器之一,它允许开发者以绝对坐标的方式自由放置子节点(如按钮、文本框等),特别适合需要精确控制元素位置的场景。 #### 一、Pane 的核心特性 1. **自由定位**:子节点通过 $(x, y)$ 坐标定位 2. **自动尺寸调整**:默认根据子节点计算最小尺寸 3. **无布局约束**:不强制子节点排列规则 4. **基础容器功能**:支持添加/删除节点、CSS 样式等 #### 二、基础使用示例 ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class BasicPaneDemo extends Application { @Override public void start(Stage stage) { // 创建 Pane 容器 Pane pane = new Pane(); pane.setStyle("-fx-background-color: #f0f8ff;"); // 设置背景色 // 创建按钮并设置坐标 Button btn1 = new Button("按钮1"); btn1.setLayoutX(50); // X 坐标 btn1.setLayoutY(30); // Y 坐标 Button btn2 = new Button("按钮2"); btn2.setLayoutX(150); btn2.setLayoutY(100); // 添加按钮到 Pane pane.getChildren().addAll(btn1, btn2); // 创建场景并显示 Scene scene = new Scene(pane, 300, 200); stage.setTitle("Pane基础示例"); stage.setScene(scene); stage.show(); } } ``` **效果说明**: - 两个按钮固定在指定坐标位置 $(50,30)$ 和 $(150,100)$ - 窗口缩放时按钮位置保持不变 - 背景色为浅蓝色(CSS 样式控制) #### 三、动态绑定示例(引用[3]的优化实现) ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; public class BindingPaneDemo extends Application { @Override public void start(Stage stage) { Pane pane = new Pane(); Circle circle = new Circle(); // 属性绑定:圆心始终位于面板中心 circle.centerXProperty().bind(pane.widthProperty().divide(2)); circle.centerYProperty().bind(pane.heightProperty().divide(2)); circle.setRadius(40); circle.setFill(Color.CORNFLOWERBLUE); pane.getChildren().add(circle); Scene scene = new Scene(pane, 300, 300); stage.setTitle("动态居中圆形"); stage.setScene(scene); stage.show(); } } ``` **关键绑定机制**: - `circle.centerXProperty().bind(pane.widthProperty().divide(2))` 圆心 X 坐标 = 面板宽度 / 2 - `circle.centerYProperty().bind(pane.heightProperty().divide(2))` 圆心 Y 坐标 = 面板高度 / 2 - **效果**:窗口缩放时圆形自动居中[^3] #### 四、实际应用场景 1. **游戏界面开发**:精确控制角色/道具位置 2. **数据可视化**:动态绑定图表坐标 3. **自定义控件**:组合复杂UI元素 4. **动画效果**:配合时间轴实现元素移动 #### 五、使用技巧 1. **坐标系统**:左上角为原点 $(0,0)$,X轴向右,Y轴向下 2. **叠加顺序**:后添加的节点显示在上层 3. **事件处理**:通过 `setOnMouseClicked()` 实现交互 4. **性能优化**:大数据量时使用 `Canvas` 替代多个节点
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值