JavaFX(面板和组)

JavaFX布局(面板和组)

JavaFX中容纳节点的容器有面板和组(group)

特点:1. Group类常用于将节点组合成组并作为一个组进行转换和缩放

​ 2. 面板和UI组件对象是可以改变大小的,但是组,形状,以及文本对象是不能改变大小的

下面是用于容纳和组织节点的面板

pane 布局面板的基类,它有getChildren()方法来返回面板中的节点列表

StackPane 节点放置在面部中央,并且叠加在其他面板之上

FlowPane 节点以水平方式一行一行放置,或者以垂直方式一列一列放置

GridPane 节点放置在一个二维网格的单元格中

BorderPane 将节点放置在顶部,右面,底部,左面以及中间区域

HBox 节点放在单行中

VBox 节点放在单列中

FlowPane

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;

public class MyjavaFX10 extends Application{
	@Override
	public void start(Stage primaryStage) {
		FlowPane pane = new FlowPane();//设置一个FlowPane面板。
		pane.setPadding(new Insets(11,12,13,14));//使用Insets对象设置它的padding(填充)属性,设置它的面板边框大小(以像素为单位,按照上右下左的顺序)
		pane.setHgap(5);//指定面板中两个相邻节点之间的水平间距
		pane.setVgap(5);//指定面板中两个相邻节点之间的垂直间距
		pane.getChildren().addAll(new Label("First Name"),new TextField()
				,new Label("MI:"),new TextField()
				,new Label("Last Name"),new TextField());//将节点添加到面板之中
		Scene scene = new Scene(pane,200,250);//将面板放在场景里面
		primaryStage.setTitle("ShowFlowPane");//设置舞台标题
		primaryStage.setScene(scene);//将场景放在舞台上面
		primaryStage.show();//展示
	}
	public static void main(String[] args) {
		 Application.launch(args);
	} 

运行后会产生六个由文字和文本域组成的节点,拉长之后可以观察到六个节点是呈水平方向放置,符合FlowPane规则(注意:文本域节点只能加载到一个面板中,也只能加一次,将一个节点加入一个面板中多次或者加入不同面板中将引起运行时错误)

GridPane

import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.application.Application;
import javafx.application.Application;
public class MyjavaFX11 extends Application{
	@Override
	public void start(Stage primaryStage) {
		GridPane pane = new GridPane();
		pane.setAlignment(Pos.CENTER);
		pane.setPadding(new Insets(11.5,12.5,13.5,14.5));//使用Insets对象设置它的padding(填充)属性,设置它的面板边框大小(以像素为单位,按照上右下左的顺序)
		pane.setHgap(5.5);//指定面板中两个相邻节点之间的水平间距
		pane.setVgap(5.5);//指定面板中两个相邻节点之间的垂直间距
		pane.add(new Label("First Name"),0, 0);//以坐标的形式放置标签和文本域的位置
		pane.add(new TextField(), 1, 0);
		pane.add(new Label("MI"), 0, 1);
		pane.add(new TextField(), 1, 1);
		pane.add(new Label("Last Name"), 0, 2);
		pane.add(new TextField(), 1, 2);
	    Button btAdd = new Button("Add Name");//设置一个按钮
	    pane.add(btAdd, 1,3);//设置按钮的位置
	    GridPane.setHalignment(btAdd, HPos.RIGHT);//setHalignment()方法为按钮节点设置水平对齐
	    Scene scene = new Scene(pane);//将面板放在场景里面
	    primaryStage.setTitle("ShowGridPane");//设置舞台标题
	    primaryStage.setScene(scene);//将场景放在舞台上面
	    primaryStage.show();//展示
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Application.launch(args);
	}
} 

默认情况下网格面板会根据其中内容的首选尺寸来重新调整行和列的尺寸,哪怕网格面板调整为比他的首选尺寸更大。可以通过调用setPrefWidth和setPrefHeight方法来为其中内容的首选宽度和高度设置一个大的值,这样当网格面板变大时,内容将自动伸展来填满网格面板。

BorderPane

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class MyjavaFX12 extends Application{
	@Override
	public void start(Stage primaryStage) {
		BorderPane pane = new BorderPane();
		pane.setTop(new CustomPane("Top"));//为上下左右中设置五个节点,五个节点都在面板上面
		pane.setBottom(new CustomPane("Bottom"));
		pane.setLeft(new CustomPane("Left"));
		pane.setCenter(new CustomPane("Center"));
		pane.setRight(new CustomPane("Right"));
		Scene scene = new Scene(pane);//将面板放在场景里面
	    primaryStage.setTitle("ShowGridPane");//设置舞台标题
	    primaryStage.setScene(scene);//将场景放在舞台上面
	    primaryStage.show();//展示
	}
class CustomPane extends StackPane{//定义了StackPane的CustomPane类,
	public CustomPane(String title) {
		getChildren().add(new Label(title));//加入一个标签(标题)
		setStyle("-fx-border-color:red");//为边框颜色设置样式
		setPadding(new Insets(11.5,12.5,13.5,14.5));//设置内边距
	}
}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Application.launch(args);
	}
}

注意:

  1. 一个面板是一个节点,所以一个面板可以加入到另外一个面板之中

  2. 要将一个面板从区域移除,如:顶部,调用setTop(null).

  3. 如果一个区域没有被占据,那么就不会分配空间给这个区域

HBox和VBox

import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class MyjavaFX13 extends Application{
	@Override
	public void start(Stage primaryStage) {
		BorderPane pane = new BorderPane();
		pane.setTop(getHBox());//设置节点放在上面
		pane.setLeft(getVBox());//设置节点放在左侧
		Scene scene = new Scene(pane);//将面板放在场景里面
	    primaryStage.setTitle("ShowGridPane");//设置舞台标题
	    primaryStage.setScene(scene);//将场景放在舞台上面
	    primaryStage.show();//展示
	}
    private HBox getHBox() {
    	HBox hbox = new HBox(15);
    	hbox.setPadding(new Insets(15,15,15,15));
    	hbox.setStyle("-fx-background-color:gold");
    	hbox.getChildren().add(new Button("Computer Science"));
    	hbox.getChildren().add(new Button("Chemistry"));
    	return hbox;
    }
    private VBox getVBox() {
    	VBox vbox = new VBox();
    	vbox.setPadding(new Insets(15,5,5,5));
    	vbox.getChildren().add(new Label("Courses"));
    	Label[] courses = {new Label("CSIC 1301"),new Label("CSIC 1302")
    			,new Label("CSIC 2410"),new Label("CSIC 3720")};//将新节点放入数组中,方便进一步编写
    	for(Label course: courses) {//将数组里面的元素遍历
    		VBox.setMargin(course, new Insets(0,0,0,15));//setMargin()方法,为节点设置边距
    		vbox.getChildren().add(course);//将节点放入对象
    	}
    	vbox.getChildren().add(new Label("Courses"));
    	return vbox;
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Application.launch(args);
	}
} 
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaFX,可以使用TableView来创建表格。以下是创建表格的一些基本步骤: 1. 创建一个TableView对象。 2. 创建表格的列。使用TableColumn类来创建表格的列。每个列都需要设置一个标题和一个属性值(该属性用于显示该列的数据)。 3. 将列添加到TableView。使用TableView的getColumns()方法来获取列列表,并使用add()方法将列添加到列表。 4. 创建一个数据模型。数据模型定义了表格的数据。可以使用ObservableList或List作为数据模型。 5. 将数据模型设置为TableView的items属性。 6. 在FXML文件,可以使用fx:id属性来标识表格和列,并使用fx:include标记将表格添加到面板。 下面是一个简单的JavaFX应用程序,它创建一个表格,并在表格显示一些数据: ```java import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class TableExample extends Application { private TableView<Person> table = new TableView<Person>(); private ObservableList<Person> data = FXCollections.observableArrayList( new Person("John", "Doe"), new Person("Jane", "Doe"), new Person("Bob", "Smith") ); public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { TableColumn firstNameCol = new TableColumn("First Name"); firstNameCol.setCellValueFactory( new PropertyValueFactory<Person, String>("firstName")); TableColumn lastNameCol = new TableColumn("Last Name"); lastNameCol.setCellValueFactory( new PropertyValueFactory<Person, String>("lastName")); table.setItems(data); table.getColumns().addAll(firstNameCol, lastNameCol); BorderPane root = new BorderPane(); root.setCenter(table); Scene scene = new Scene(root, 300, 250); stage.setTitle("Table Example"); stage.setScene(scene); stage.show(); } public static class Person { private final String firstName; private final String lastName; public Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } } } ``` 在这个例子,表格有两列:"First Name"和"Last Name"。数据模型是一个包含三个Person对象的ObservableList。每个Person对象有两个属性:firstName和lastName,这些属性对应于表格的列。在start()方法,我们创建了一个TableView对象和两个TableColumn对象,并将列添加到表格。然后,我们将数据模型设置为TableView的items属性,并将表格添加到BorderPane。最后,我们创建一个Scene对象并将其设置为舞台的场景,并显示舞台。 这只是一个简单的示例,您可以根据您的需求自定义表格。希望这能帮助您入门JavaFX表格的设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值