JavaFX 2.0布局窗格– HBox和VBox

如果要對JavaFX 2.0中所有不同的布局窗格進行概述,或者想了解有關它們的一些基本知識,請參閱我以前的文章《 JavaFX 2.0中的布局窗格》 。
布局窗格HBoxVBox絕對是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 " + (i+1));Button bt2 = new Button("Button " + (i+1)); // unfortunately there′s no "clone" or "copy" methodButton bt3 = new Button("Button " + (i+1));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為根)并顯示我們的應用程序。
您的應用程序現在應如下所示:

javafx1

您可以看到每個VBox以定義的間距值布置其子按鈕, HBox布置三個VBox且間距為50像素。 因為我們為每個VBox設置了不同的對齊方式,所以您可以看到它們以特定方式將按鈕排列在其邊界內。
注意:我們還為HBox指定了路線,否則三個VBox不會布置在中間!
如果您調整應用程序窗口的大小,則應如下所示:

javafx2

您可以看到VBoxes不斷增長并填充了其父級提供的空間,并且它們仍根據其設置的對齊方式排列其子級。
HBox和VBox –示例2
下一個示例將顯示如何使用靜態setMarginsetHgrow (分別為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) 。 在這里,我們告訴第二個VBoxHBox內水平生長。
最后使用hbox.setPadding(new Insets(20));StackPane.setMargin(hbox, new Insets(20))我們給整個HBox填充一些內容。 這兩行在這里表現相同,因為一方面我們為窗格本身指定了一個填充,窗格應該在其邊界內使用填充來布置其子級,而另一方面,我們告訴父級使用給定的布局對窗格進行布局它周圍的邊緣。
注意:邊距是外部距離/間隙,填充內部距離/間隙。

這是一張為您展示“ CSS Box Model”的圖片,它演示了內容,填充,邊框和元素邊距之間的關系。

資料來源:w3Schools.com

資料來源:w3Schools.com

因為setPadding方法是在Region類中定義的,所以每個布局窗格都可以使用此方法。 Insets類通常用于這些目的,并提供了兩種不同的構造函數:一種采用一個double值并為每側定義相同的填充,而一個構造函數采用4個double值并從上至左順時針定義填充。
提示:如果將邊框應用于HBox并在兩行之間切換以設置填充/邊距,您會更清楚地看到差異。
您的應用程序應如下所示:

javafx4
注意HBox周圍的10px填充。 如果現在調整窗口大小,則其外觀應類似于以下內容: javafx5 如您所見,左側的VBoxTextArea垂直增長,而整個右側的VBoxHBox水平增長。

參考: 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372147.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372147.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372147.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

flask mysql分頁,Flask分頁的實現方法

所需環境Flask-SQLAlchemy分頁使用Flask-SQLAlchemy提供的pagination()方法。頁數是pagination()方法的第一個參數&#xff0c;也是唯一必須的參數。可選參數per_page用來指定每頁顯示的記錄數。參考代碼&#xff1a;def index():# ...page request.args.get(page, 1, typeint…

Java中的生成器設計模式

Java 中的 Builder設計模式是一種創建模式&#xff0c;即用于創建對象&#xff0c;類似于 工廠方法設計模式 &#xff0c;這也是創建設計模式。 在學習任何設計模式之前&#xff0c;我建議先找出特定設計模式要解決的問題。 眾所周知&#xff0c; 必要性是發明的母親。 在沒有面…

驗證碼( 隨機數)

方式一&#xff08;變色版&#xff09;&#xff1a; <html> <head><meta charset"UTF-8"/><title></title><script src"jquery-2.0.2.min.js"></script> </head> <body> <?php header("co…

單片機串行通信全解析

1.什么是串行通信&#xff1f; 串行通信&#xff08;英語&#xff1a;Serial communication&#xff09;是指在計算機總線或其他數據通道上&#xff0c;每次傳輸一個位元數據&#xff0c;并連續進行以上單次過程的通信方式。與之對應的是并行通信&#xff0c;它在串行端口上通過…

java type 類型,java中的泛型類型與Type接口

假設我們定義了一個Room的類&#xff0c;表示一個房間public classRoom(){}由于我們建造好房間是&#xff0c;不知道房間以后的用途&#xff0c;他可能用來住人&#xff0c;也有可能用來放貨物&#xff0c;因此需要用到泛型。但是我們可能想獲取Room這個房間里面進來的的東西的…

centos7下操作防火墻

引言 最近使用centos7系統比較頻繁&#xff0c;在配置服務器的時候&#xff0c;總是遇到能夠ping通服務器&#xff0c;但是就是沒有辦法訪問80端口&#xff0c;這個時候我的直覺告訴我&#xff0c;肯定是防火墻的原因&#xff0c;但是使用iptables卻怎么都找不到命令&#xff0…

其他團隊對本團隊評價的總結

我們小組在看了其他小組的評價后&#xff0c;對自己的程序有了新的看法。轉載于:https://www.cnblogs.com/bk1246788/p/6879691.html

Java:使用Fork / Join框架的Mergesort

此項的目的是顯示一個Fork / Join RecursiveAction的簡單示例&#xff0c;而不是過多地研究合并合并的可能優化方法&#xff0c;或者比使用Exkutor / Join Pool優于現有的基于Java 6的現有實現&#xff08;例如ExecutorService&#xff09;的相對優勢。 以下是使用Java的自上而…

php的異常處理方式,php異常處理基本方法

當一個php腳本運行時&#xff0c;為了防止腳本運行崩潰&#xff0c;亦或是當php作為webserver&#xff0c;為了防止php程序出錯&#xff0c;拋出httpcode500錯誤&#xff0c;我們常常需要對php程序做異常處理。今天介紹的是最基本的異常處理方法&#xff1a;一般而言&#xff0…

關系型數據庫的三范式

第一范式:確保每列的原子性. 如果每列(或者每個屬性)都是不可再分的最小數據單元(也稱為最小的原子單元),則滿足第一范式. 例如:顧客表(姓名、編號、地址、……)其中"地址"列還可以細分為國家、省、市、區等。第二范式:在第一范式的基礎上更進一層,目標是確保表…

vray學習筆記(3)-多維子材質是個什么東西

多維子材質是個什么東西&#xff1f;為什么出現這個概念&#xff1f; 在3dsmax官方網站&#xff0c;我們可以看到它的定義&#xff1a; The Multi/Sub-Object material lets you assign different materials at the sub-object level of your geometry. 意思是多維子材質這個概…

Hello JavaFX 2.0:命令行介紹

我從博客文章Hello JavaFX 2.0&#xff1a;NetBeans 7.1 beta的介紹中&#xff0c;從NetBeans 7.1 beta的角度看了一個無處不在的Hello World示例的簡單JavaFX版本。 在本文中&#xff0c;我將介紹僅使用命令行工具通過JavaFX實現的Hello World版本。 JavaFX 2.0 API文檔包括ja…

matlab空格會消失了,如何在Matlab中自動刪除保存的尾隨空格?

我有同樣的需求,并寫了一個小腳本來做一些接近的事情.將以下內容放在MATLAB desktop shortcut中.每當您單擊快捷方式按鈕時,它將從編輯器中的活動文件中刪除尾隨空格.不如在保存時自動執行它 – 你需要記住在保存之前按下按鈕 – 但差不多.測試在11b,12a和13b,但在12b也應該沒問…

object to 字符串json

1 package com.beijxing.TestMain;2 3 import com.beijxing.entity.Student;4 import com.google.gson.Gson;5 import com.google.gson.annotations.SerializedName;6 7 /** 8 * 9 * author 作者 : ywp 10 * version 創建時間&#xff1a;2016年10月30日 下午9:21:33 11 */ 12…

JS 對象(Object)和字符串(String)互轉

var jsObj {}; jsObj.testArray [1,2,3,4,5]; jsObj.name CSS3; jsObj.date 8 May, 2011; var str JSON.stringify(jsObj); var str1 JSON.parse(str); var str2 JSON.stringify(str1);alert(str);alert(str1); alert(str2);對象拷貝&#xff1a;var newObj JSON…

php 后退按鈕事件,php – 后退按鈕的會話問題

我在php文件中有這個代碼,它包含在我要共享的所有頁面中并保護我的頁面.session_name("login");session_start();if (!isset($_SESSION[UserId])) {if(!header("Location: https://subdomain.mywebsite.com/")){ die("Unauthorized access"); }}…

異常:java lang AbstractMethodError

通常在嘗試調用抽象方法時拋出此java.lang.AbstractMethodError。通常&#xff0c;此錯誤是在編譯時本身識別的&#xff0c;如果在運行時拋出此錯誤&#xff0c;則該類必須不兼容&#xff08;與先前存在的類不兼容&#xff09; &#xff09;更改。因此&#xff0c;它是Incompat…

05.while循環的練習

練習1:namespace _05.while循環練習01{ class Program { static void Main(string[] args) { //打印100次"努力學習.net技術" int i 0; while (i < 100) //當i小于100就執行循環體的內容 { Console.WriteLine("{0}.努力學習.net技術",i); i; } Console…

oracle列分區,Oracle數據庫分區--實例

分區表通過對分區列進行判斷&#xff0c;把滿足不同條件的分區列對應的記錄保存在不同的分區中。一、何為分區表什么情況下會使用分區表&#xff1f;表中已有大量數據&#xff0c;或預計到表中將會保存大量的數據可以按照預期(月份、區域、dml)對表中的數據執行查詢和更新什么是…

ZK實際應用:MVVM –與ZK客戶端API一起使用

在之前的文章中&#xff0c;我們使用ZK的MVVM實現了以下功能&#xff1a; 將數據加載到表中 使用表單綁定保存數據 刪除條目并以編程方式更新視圖 ZK MVVM和ZK MVC實現方式之間的主要區別是&#xff0c;我們不直接在controller&#xff08;ViewModel&#xff09;類中訪問和操…