手机网站建设品牌,新网站建设问卷,手机网站被自动跳转,义乌网站建设电话如果要对JavaFX 2.0中所有不同的布局窗格进行概述#xff0c;或者想了解有关它们的一些基本知识#xff0c;请参阅我以前的文章《 JavaFX 2.0中的布局窗格》 。 布局窗格HBox和VBox绝对是JavaFX 2.0中最基本的布局容器。 如您所知#xff0c;它们的用途是将所有子级布置在一… 如果要对JavaFX 2.0中所有不同的布局窗格进行概述或者想了解有关它们的一些基本知识请参阅我以前的文章《 JavaFX 2.0中的布局窗格》 。 布局窗格HBox和VBox绝对是JavaFX 2.0中最基本的布局容器。 如您所知它们的用途是将所有子级布置在一个水平行 HBox 或一个垂直列 VBox 中。 因为它们非常容易使用并且对于较小的布局问题非常有用所以您可能会经常使用它们。 我将给出两个有关如何使用它们的示例。 与其他示例一样首先是代码然后是解释。 HBox和VBox –示例1 import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;/**** Created on: 20.03.2012* author Sebastian Damm*/
public class HBoxandVBoxExample extends Application
{Overridepublic void start(Stage primaryStage) throws Exception{ HBox hbox new HBox(50);hbox.setAlignment(Pos.CENTER); // default TOP_LEFTVBox vbox1 new VBox();vbox1.setAlignment(Pos.BOTTOM_CENTER);vbox1.setStyle(-fx-border-style: solid; -fx-border-width: 1; -fx-border-color: black);VBox vbox2 new VBox(10);vbox2.setAlignment(Pos.CENTER);vbox2.setStyle(-fx-border-style: solid; -fx-border-width: 1; -fx-border-color: black);VBox vbox3 new VBox(20);vbox3.setAlignment(Pos.TOP_CENTER);vbox3.setStyle(-fx-border-style: solid; -fx-border-width: 1; -fx-border-color: black);for (int i 0; i 5; i){Button bt new Button(Button (i1));Button bt2 new Button(Button (i1)); // unfortunately there´s no clone or copy methodButton bt3 new Button(Button (i1));vbox1.getChildren().add(bt);vbox2.getChildren().add(bt2);vbox3.getChildren().add(bt3);}hbox.getChildren().addAll(vbox1, vbox2, vbox3);Scene scene new Scene(hbox, 350, 250); // the hbox is the root nodeprimaryStage.setTitle(HBox and VBox Example);primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args){Application.launch(args);}
} 基本上我们创建三个不同的VBox并将它们放入一个HBox中。 在这两个类中您都可以直接在构造函数中或通过setSpacing方法定义间距值。 此值将用作窗格中各个子项之间的间隙。 行HBox hbox new HBox(50); 因此创建一个HBox来容纳三个VBox每个VBox之间的间隔为50像素。 我们使用setAlignment方法来指定各个VBox如何安排和布局所有子级。 使用setStyle可以将自定义CSS样式应用于任何Node 。 我不想进一步详细介绍因为我将在下一篇文章中介绍JavaFX 2.0中CSS样式但是如果您已经熟悉CSS那么您可能已经注意到JavaFX 2.0团队幸运的是我决定非常严格地遵循W3C http://www.w3.org 定义CSS标准。 如果您不熟悉CSS则只需要知道CSS的这些行会在组件周围创建1px宽的黑色边框。 我在这里使用它们来显示各个VBox的大小。 现在接下来的几行对于您来说应该已经很普通了我们为每个VBox创建五个按钮将不同的VBox放入我们的HBox中声明一个Scene对象以HBox为根并显示我们的应用程序。 您的应用程序现在应如下所示 您可以看到每个VBox以定义的间距值布置其子按钮 HBox布置三个VBox且间距为50像素。 因为我们为每个VBox设置了不同的对齐方式所以您可以看到它们以特定方式将按钮排列在其边界内。 注意我们还为HBox指定了路线否则三个VBox不会布置在中间 如果您调整应用程序窗口的大小则应如下所示 您可以看到VBoxes不断增长并填充了其父级提供的空间并且它们仍根据其设置的对齐方式排列其子级。 HBox和VBox –示例2 下一个示例将显示如何使用静态setMargin和setHgrow 分别为setVgrow 方法 import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;/**** Created on: 20.03.2012* author Sebastian Damm*/
public class HBoxandVBoxExample2 extends Application
{Overridepublic void start(Stage primaryStage) throws Exception{ StackPane root new StackPane();HBox hbox new HBox(30); // create a HBox to hold 2 vboxes // create a vbox with a textarea that grows verticallyVBox vbox new VBox(10); Label lbName new Label(I´m a label!);TextField textField new TextField();TextArea textArea new TextArea();textArea.setPrefWidth(100);VBox.setVgrow(textArea, Priority.ALWAYS); vbox.getChildren().addAll(lbName, textField, textArea);// create a vbox that grows horizontally inside the hboxVBox vbox2 new VBox(10); Label lbName2 new Label(I´m also a label!);TextField tf2 new TextField();tf2.setPromptText(type here);TextArea textArea2 new TextArea();textArea2.setPrefWidth(100);vbox2.getChildren().addAll(lbName2, tf2, textArea2);HBox.setHgrow(vbox2, Priority.ALWAYS);// the next two lines behave equally - try to comment the first line out and use the 2nd linehbox.setPadding(new Insets(20));
// StackPane.setMargin(hbox, new Insets(20));hbox.getChildren().addAll(vbox, vbox2);root.getChildren().add(hbox);Scene scene new Scene(root, 500, 300); // the stack pane is the root nodeprimaryStage.setTitle(HBox and VBox Example 2);primaryStage.setScene(scene);primaryStage.show(); }public static void main(String[] args){Application.launch(args);}
} 在此示例中我们创建了两个VBox它们是HBox的子级。 VBox内有一个标签一个文本字段和一个文本区域。 第一行是VBox.setVgrow(textArea, Priority.ALWAYS) 。 我们定义的这行代码是如果TextArea对象包含在VBox则它应始终垂直增长否则将不会有任何效果。 接下来将重点放在HBox.setHgrow(vbox2, Priority.ALWAYS) 。 在这里我们告诉第二个VBox在HBox内水平生长。 最后使用hbox.setPadding(new Insets(20)); 或StackPane.setMargin(hbox, new Insets(20))我们给整个HBox填充一些内容。 这两行在这里表现相同因为一方面我们为窗格本身指定了一个填充窗格应该在其边界内使用填充来布置其子级而另一方面我们告诉父级使用给定的布局对窗格进行布局它周围的边缘。 注意边距是外部距离/间隙填充内部距离/间隙。 这是一张为您展示“ CSS Box Model”的图片它演示了内容填充边框和元素边距之间的关系。 资料来源w3Schools.com 因为setPadding方法是在Region类中定义的所以每个布局窗格都可以使用此方法。 Insets类通常用于这些目的并提供了两种不同的构造函数一种采用一个double值并为每侧定义相同的填充而一个构造函数采用4个double值并从上至左顺时针定义填充。 提示如果将边框应用于HBox并在两行之间切换以设置填充/边距您会更清楚地看到差异。 您的应用程序应如下所示 注意HBox周围的10px填充。 如果现在调整窗口大小则其外观应类似于以下内容 如您所见左侧的VBox的TextArea垂直增长而整个右侧的VBox在HBox水平增长。 参考 JavaFX 2.0布局窗格–来自我们JCG合作伙伴 Sebastian Damm的HBox和VBox在Java博客上的Just my 2 cents 。 翻译自: https://www.javacodegeeks.com/2012/07/javafx-20-layout-panes-hbox-and-vbox.html