Java開發筆記(一百三十八)JavaFX的箱子

前面介紹了JavaFX標籤控件的用法,其中提到Label文本支持中文字體,那麼它到底支持哪些中文字體呢?天然要看當前的操做系統都安裝了哪些字體才行,對於中文的Windows系統,默認安裝了黑體「SimHei」、宋體「NSimSun」、仿宋「FangSong」與楷體「KaiTi」。在AWT與Swing的體系中,Font工具支持填入中文字體的名稱;但在JavaFX編程之中,Font工具則要填寫中文字體的拼音。除了這四種基礎字體之外,只要系統安裝了中文Office,則還會增長下述的中文字體,這些字體也可用於JavaFX代碼:
隸書:LiSu
幼圓:YouYuan
方正舒體:FZShuTi
方正姚體:FZYaoti
華文細黑:STXihei
華文楷體:STKaiti
華文宋體:STSong
華文中宋:STZhongsong
華文仿宋:STFangsong
華文彩雲:STCaiyun
華文琥珀:STHupo
華文隸書:STLiti
華文行楷:STXingkai
華文新魏:STXinweihtml

在界面佈局方面,JavaFX也作了補充加強。原來AWT/Swing框架擁有三種佈局:流式佈局、網格佈局、邊界佈局,然而缺乏了兩種常見佈局:左右排列的水平佈局和上下排列的垂直佈局。儘管流式佈局也是從左到右排列,但一行塞不下了會自動換行,沒法實現固定展現一行的效果。單列多行的網格佈局當然貌似垂直佈局,但每一個網格的高度是固定的,難以知足每行高度靈活變化的要求。AWT與Swing身爲上個世紀的老古董,早已中止了功能擴充,所幸JavaFX適時推出了水平佈局和垂直佈局的參照控件。其中對照水平佈局的控件名叫水平箱子HBox,對照垂直佈局的控件名叫垂直箱子VBox,它倆名義上是箱子,其實跟流式窗格、網格窗格、邊界窗格一樣屬於窗格你們族。在編碼的時候,HBox和VBox的用法接近於流式窗格FlowPane,能夠將它們看做是一種特殊的流式窗格。
接下來經過具體的代碼來演示水平箱子和垂直箱子的做用,爲了更好地觀察箱子內部的標籤文本,首先定義一個獲取標籤對象的公共方法getLabel,該方法的實現代碼以下所示:編程

	// 得到指定文本及字體的標籤
	private Label getLabel(String text, Font font) {
		Label label = new Label(text); // 建立一個標籤
		label.setFont(font); // 設置標籤的字體
		label.setAlignment(Pos.CENTER); // 設置標籤的對齊方式
		label.setWrapText(true); // 設置標籤文本是否支持自動換行
		return label;
	}

 

而後建立一個水平箱子,並往該箱子裏依次添加四個文本標籤,相關的操做代碼片斷示例以下:框架

		Button btn1 = new Button("水平排列"); // 建立一個按鈕
		btn1.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				HBox hbox = new HBox(); // 建立一個水平箱子
				hbox.setAlignment(Pos.CENTER); // 設置水平箱子的對齊方式
				hbox.getChildren().add(getLabel("離離原上草", Font.font("SimHei", 25))); // 給水平箱子添加一個標籤
				hbox.getChildren().add(getLabel("一歲一枯榮", Font.font("KaiTi", 25))); // 給水平箱子添加一個標籤
				hbox.getChildren().add(getLabel("野火燒不盡", Font.font("NSimSun", 25))); // 給水平箱子添加一個標籤
				hbox.getChildren().add(getLabel("春風吹又生", Font.font("FangSong", 25))); // 給水平箱子添加一個標籤
				borderPane.setCenter(hbox); // 把水平箱子放到邊界窗格的中央
			}
		});
		flowPane.getChildren().add(btn1); // 往流式窗格上添加按鈕

 

運行包括上述測試代碼的程序,單擊按鈕後的窗口界面以下圖所示,可見此時四個文本標籤從左到右擠在了同一水平方向。ide


接着建立一個垂直箱子,也往該箱子依次添加四個文本標籤,相關的操做代碼片斷示例以下:工具

		Button btn2 = new Button("垂直排列"); // 建立一個按鈕
		btn2.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				VBox vbox = new VBox(); // 建立一個垂直箱子
				vbox.setAlignment(Pos.CENTER); // 設置垂直箱子的對齊方式
				vbox.getChildren().add(getLabel("離離原上草", Font.font("LiSu", 30))); // 給垂直箱子添加一個標籤
				vbox.getChildren().add(getLabel("一歲一枯榮", Font.font("YouYuan", 30))); // 給垂直箱子添加一個標籤
				vbox.getChildren().add(getLabel("野火燒不盡", Font.font("STXingkai", 30))); // 給垂直箱子添加一個標籤
				vbox.getChildren().add(getLabel("春風吹又生", Font.font("STXinwei", 30))); // 給垂直箱子添加一個標籤
				borderPane.setCenter(vbox); // 把垂直箱子放到邊界窗格的中央
			}
		});
		flowPane.getChildren().add(btn2); // 往流式窗格上添加按鈕

 

再次運行包括上述測試代碼的程序,單擊按鈕後的窗口界面以下圖所示,可見此時四個文本標籤改爲從上到下的垂直排列了。佈局

 



更多Java技術文章參見《Java開發筆記(序)章節目錄測試

相關文章
相關標籤/搜索