`

JavaFX学习之Layout

阅读更多
   Region 继承parent,被定义为屏幕的一块,可以包含其它node,并且可以用css修饰。region只有继承parent的getChildren()方法,是保护类型,所以在外面不能添加子节点,所以一般都是重写region。从region的定义中看到,region并没有坐布局处理,仅仅是包含其它node,所以子节点需要自己去控制布局。一般都是重写parent的layoutChildren去布局子节点,不过region提供了单个节点在region上布局的方法。
region的一些布局方法:
layoutInArea(Node child, double areaX, double areaY, double areaWidth, double areaHeight, double areaBaselineOffset, HPos halignment, VPos valignment)
layoutInArea(Node child, double areaX, double areaY, double areaWidth, double areaHeight, double areaBaselineOffset, Insets margin, boolean fillWidth, boolean fillHeight, HPos halignment, VPos valignment) 
layoutInArea(Node child, double areaX, double areaY, double areaWidth, double areaHeight, double areaBaselineOffset, Insets margin, HPos halignment, VPos valignment) 
positionInArea(Node child, double areaX, double areaY, double areaWidth, double areaHeight, double areaBaselineOffset, HPos halignment, VPos valignment) 
positionInArea(Node child, double areaX, double areaY, double areaWidth, double areaHeight, double areaBaselineOffset, Insets margin, HPos halignment, VPos valignment) 


其它一些方法:
setSnapToPixel(boolean value) 
snapPosition(double value) 
snapSize(double value) 
snapSpace(double value) 
resize(double width, double height) 
setPadding(Insets value) 


属性:
height,width ,prefHeight ,prefWidth ,minHeight ,minWidth ,maxHeight ,maxWidth 设置宽高
snapToPixel
padding 

   Pane 继承Region,所有布局类的父类。被定为子类已经被控制好布局,用户只需要添删。所以当你的父类是布局类时,layoutX,Y设置可能无效,因为被父类管理了。Pane可以直接使用,它并没有设置子节点的布局。
  
        Pane canvas = new Pane();
		canvas.setStyle("-fx-background-color: black;");
		canvas.setPrefSize(200, 200);
		Circle circle = new Circle(50, Color.BLUE);
		circle.setTranslateX(50);
		circle.setTranslateY(50);
		Rectangle rectangle = new Rectangle(100, 100, Color.RED);
		rectangle.relocate(70, 70);
		canvas.getChildren().addAll(circle, rectangle);
   

可以正常的设置layoutX,Y,也可以设置相对父类的位置。

   HBox and VBox   水平和垂直盒子布局,也就是从左到右布局和从上到下布局。其子节点的布局已经被父类安排好,自己设置无效,不过可以设置translate。
	public void init(HBox root){
		Button b1 = new Button("open");
		b1.setTranslateY(100);
		Button b2 = new Button("close");
		TableView tableView = new TableView();
		HBox.setHgrow(tableView, Priority.ALWAYS);
		root.setSpacing(20);
		root.setStyle("-fx-background-color:#EEEEEE");
		root.getChildren().addAll(b1,b2,tableView);
	}

HBox是水平布局,所以一般子节点只设置宽度,而子节点高度一般都由父类管理自动扩展填充,若不想由父类控制,则设置setFillHeight(boolean value)为false,取消父类的自动填充。

方法:
setFillHeight(boolean value) //设置是否自动填充高度,为false则其子节点可以设置自己的高度
setSpacing(double value) //二个物体间隔
setHgrow(Node child, Priority value) //因为HBox是水平布局,子节点的宽度不会跟随父类一起扩展,当父类扩大时,水平方向则有空白,若想要其子节点随父类扩展而扩展则调用该方法。设置子节点水平方向动填充父节点,可以同时设置多个自己点自动扩充。
setMargin(Node child, Insets value) //为子节点间设置margin space
setAlignment(Pos value) //控制子节点的位置
layoutChildren() //布局的时候用,一般是继承该类的子类,重写这个方法
getContentBias() 

VBox和HBox一样,只是方向变了

  AnchorPane 锚布局,通过设置其与边界的偏移位置固定位置
 
        AnchorPane anchorpane = new AnchorPane();
	    anchorpane.setPrefSize(400, 400);
	    Button buttonSave = new Button("Save");
	    Button buttonCancel = new Button("Cancel");
	    Button buttonopen = new Button("open");
	    Button buttonoclose = new Button("Close");
	    anchorpane.getChildren().addAll(buttonSave,buttonCancel,buttonopen,buttonoclose);   // Add grid from Example 1-5
	    AnchorPane.setBottomAnchor(buttonSave, 8.0);
	    AnchorPane.setRightAnchor(buttonCancel, 5.0);
	    AnchorPane.setRightAnchor(buttonopen, 10.0);
	    AnchorPane.setBottomAnchor(buttonopen, 10.0);
	    AnchorPane.setLeftAnchor(buttonoclose, 5.0);
  

 
  BorderPane 边界布局,分为上下左右中5块。 除了设置位置外,没什么特别的方法。

  FlowPane 流布局,从左往右或从上往下,满了自动换行
方法:
setOrientation(Orientation value)  //设置流的方向,水平或垂直
setPrefWrapLength(double value) ,prefWrapLengthProperty()   //因为流布局当区域满了会自动换行,所以这里可以设置具体的换行要求(或换列)
setHgap(double value) ,setVgap(double value)  //子节点之间可以设置间隙,水平方向的和垂直方向的
setRowValignment(VPos value),setColumnHalignment(HPos value)   //row是当水平布局时设置,column是当垂直布局时设置。 均是设置其位置,若你节点的位置刚好等于你那一行位置时,那设置就感觉不到变化。可以弄一个大的node,一个小的node,此时设置就以看到小的node有明显位置变化。


  GridPane  网格布局,每个cell大小一样,子节点按位置存放。
位置设置的一些方法:
add(Node child, int columnIndex, int rowIndex, int colspan, int rowspan)  //添加一个节点,位于的列,行,占几列,占几行。索引从0开始

 
  StackPane 栈布局,子节点存放是一层层加,像栈一样,stackPane会resize子节点扩充stackPane,并且子节点自己设置大小无效,但是当子节点不能resize,或则限制了resize时,那么stackPane会把子节点放置中间。
StackPane stack = new StackPane();
Label go = new Label("Go!");
Label to = new Label("To!");
stack.setPrefSize(200,200);
HBox box = new HBox();
box.setPrefSize(50, 50);
box.setStyle("-fx-background-color:#EEEEEE");
System.out.println(box.isResizable());
stack.getChildren().addAll(box, go,to);

可以看到box被resize了,尽管它自己设置了大小。

方法:
clearConstraints(Node child)

  TilePane 瓦片布局,有点向flowpane,但是它的每一个节点也就是每一块瓦片都一样大小
方法:
setPrefTileWidth(double value) ,setPrefTileHeight(double value)  设置单元瓦片的大小


  RowConstraints 行约束
  ColumnConstraints 列约束
  ConstraintsBase 基本约束
分享到:
评论

相关推荐

    javaFx 学习--入门示例程序的源码

    import javafx.scene.layout.StackPane; import javafx.scene.text.Text; import javafx.stage.Stage; public class HelloWorld extends Application { @Override public void start(Stage primaryStage) { ...

    javaFX Demo 模板案例

    首先,JavaFX提供了丰富的UI控件,如按钮、文本框、标签、菜单等,这些控件可以通过FXML(FXML Layout)或纯Java代码进行布局和设计。FXML是一种声明式的布局语言,可以分离UI设计与业务逻辑,使代码更易于理解和...

    在IntelliJ IDEA 中使用 Gradle JavaFx

    import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { Label label = new Label("Hello, ...

    javaFX完整项目案例可用.zip

    FXML(FXML Layout)是JavaFX中的一个标记语言,用于分离应用程序的逻辑和视图。开发者可以使用FXML文件来定义UI布局,而控制器类(Controller)则负责处理用户交互。这种分离使得代码更易于维护和测试。在项目中,...

    JavaFX2.0基础教程.pdf

    JavaFX的安装通常包括下载JavaFX SDK,并将其设置为项目的依赖之一。 #### 3. JavaFX架构和框架 - **场景图(Scene Graph)**:场景图是JavaFX应用的基础组成部分,它组织了所有UI元素的层次结构,使得开发者能够...

    一个极简单JavaFX例子

    import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class HelloWorld extends Application { public static void main(String[] args) { launch(args); } @Override public void ...

    javafx之fxml例子_用户登录

    FXML(FXML Layout)是JavaFX中的一种声明式布局语言,用于简化用户界面的设计和编码分离。在本例子“javafx之fxml例子_用户登录”中,我们将探讨如何使用NetBeans IDE创建一个基于JavaFX和FXML的用户登录界面。 1....

    JavaFx GUI入门

    学习JavaFX时,你需要理解事件处理机制。JavaFX中的事件处理允许用户与UI进行交互,例如点击按钮或选择菜单项。你可以为Nodes添加事件监听器,当特定事件发生时执行相应的操作。 此外,JavaFX提供了丰富的内置控件...

    Learn JavaFX 8

    ### JavaFX 8 学习指南 #### 一、引言 JavaFX 是 Oracle 公司为 Java 平台提供的一套丰富的用户界面框架,它旨在替代早期的 AWT 和 Swing,提供更现代、功能更强大的图形用户界面开发工具。本书《Learn JavaFX 8》...

    JavaFX小游戏编程含源代码!

    在JavaFX中,控制器可以与FXML(FXML Layout)文件关联,实现视图和逻辑的分离。 4. **动画和过渡(Animations and Transitions)**:JavaFX提供了一系列的动画和过渡效果,可以用来创建游戏中的动态效果,如角色...

    基于netbeans+javafx+fxml的基本控件的使用

    FXML(FXML Layout)是JavaFX中用于声明式设计UI的一种语言,它允许我们将UI逻辑与业务逻辑分离,使代码更易于维护和理解。 1. **JavaFX基础知识**: JavaFX是一个开源的Java库,用于创建富客户端应用,支持2D和3D...

    JavaFX Demo学习2-----ImageRollover

    import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class ImageRolloverDemo extends Application { public static void main(String[] args) { launch(args); } @Override public ...

    java-javafx-layout-border-pane-demo

    在本案例中,我们关注的是`BorderPane`布局,它是JavaFX提供的五种内置布局之一。 `BorderPane`布局如其名,将区域划分为五个部分:顶部(Top)、底部(Bottom)、左侧(Left)、右侧(Right)和中心(Center)。每...

    javaFX 进度条demo源码

    import javafx.scene.layout.StackPane; import javafx.stage.Stage; ``` 2. **创建进度条对象**: 创建一个`ProgressBar`对象并将其添加到场景的布局中: ```java ProgressBar progressBar = new ...

    javafx18压缩包快速下载

    - **src**或**src.zip**:可能包含源代码,便于开发者查看和学习JavaFX的实现细节。 使用JavaFX 18,开发者可以利用其跨平台的能力,创建美观且功能丰富的应用程序。例如,使用FXML(FXML Layout)语言可以实现声明...

    javafx练习代码,基于JDK11版本

    import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class HelloWorld extends Application { @Override public void start(Stage primaryStage) { Label label = new Label("你好,...

    Learn JavaFX 8.pdf

    《Learn JavaFX 8.pdf》是一本关于JavaFX 8开发的详细教材,涵盖了JavaFX编程的众多方面。JavaFX是一种用于构建富客户端应用...教材的结构和内容安排对于想要深入学习JavaFX的开发者来说,是一本非常有价值的参考资料。

    javafx2.0 中文文档.rar

    通过阅读“javafx2.0 中文文档”,开发者可以深入理解这些概念,学习如何利用JavaFX 2.0创建高效、美观且功能丰富的应用程序。文档中应该包含了详细的技术指南、示例代码和API参考,帮助开发者快速上手并熟练掌握...

    JavaFX2.0基础教程(整合版)

    - **Oracle 接手**:Oracle 收购 Sun 后,在 2010 年 JavaOne 大会上宣布将停止对 JavaFX 脚本语言的支持,并将 JavaFX 的 API 导入 Java,这意味着 Java 开发者无需学习新的脚本语言即可利用 JavaFX 的功能。...

    Workshop-javafx-jdbc

    通过这个工作坊,学习者可以了解如何使用JavaFX构建美观的用户界面,并结合JDBC来实现后端的数据管理。 **JavaFX基础** JavaFX提供了一系列的控件,如按钮、文本框、表格视图等,用于构建用户友好的界面。它使用...

Global site tag (gtag.js) - Google Analytics