Java開發筆記(一百三十七)JavaFX的標籤

前面介紹了JavaFX的窗口框架,其中舞臺、場景、窗格都能與AWT/Swing體系的相關概念一一對應,不只如此,JavaFX的常見控件也能在Swing中找到相應的控件。好比JavaFX的按鈕控件名叫Button,對應Swing的JButton,兩種按鈕提供的方法也相似,下面是Button控件的經常使用方法說明:
setText:設置按鈕的文本。
setPrefSize:設置按鈕的推薦寬高。
setAlignment:設置按鈕的對齊方式。
setOnAction:設置按鈕的單擊事件。單擊事件的類型爲EventHandler<ActionEvent>,它的匿名內部類寫法示例以下:html

		EventHandler<ActionEvent> handler = new EventHandler<ActionEvent>() { // 建立按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				// 這裏補充單擊按鈕想要觸發的代碼邏輯
			}
		};

除了按鈕以外,標籤也是很常見的基礎控件,JavaFX的標籤控件名叫Label,對應Swing的JLabel。JavaFX的Label與JLabel同樣,都支持在標籤上顯示文本和圖像,兩者的方法調用也大同小異。下面是Label控件的經常使用方法說明(get***方法可類推):app

setText:設置標籤的文本。
setPrefSize:設置標籤的推薦寬高。
setAlignment:設置標籤的對齊方式。
setFont:設置標籤的字體。
setTextFill:設置標籤的文本顏色。
setWrapText:設置標籤文本是否支持自動換行。true表示支持,false表示不支持。
setBackground:設置標籤的背景。
setGraphic:設置標籤的圖像。
因爲Label控件與Button控件都繼承自抽象類Labeled,所以上面的標籤方法一樣適用於按鈕Button。
接下來準備在標籤上顯示文本與圖像的各類效果,爲此須要構建一個標籤控件,具體的標籤建立代碼以下所示:框架

		Label label = new Label("這裏查看文字效果\n這裏查看文字效果"); // 建立一個標籤
		label.setPrefSize(400, 100); // 設置標籤的推薦寬高
		label.setAlignment(Pos.CENTER); // 設置標籤的對齊方式
		label.setWrapText(true); // 設置標籤文本是否支持自動換行。true表示支持,false表示不支持

 

注意,JavaFX標籤的文本換行並未採用Swing那套HTML標記的方式,而是經過換行符「\n」來手動換行。至於自動換行,則經過setWrapText方法來控制,只要調用該方法設置爲true,那麼一旦文本長度超過標籤寬度,程序就會自動將多出的文字另起一行。
首先看給標籤設置背景的代碼例子,Label控件的setBackground不能直接輸入顏色,而要輸入Background對象,詳細的背景設置代碼示例以下:ide

		Button btn1 = new Button("背景黃色"); // 建立一個按鈕
		btn1.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				// 建立一個充滿指定顏色的背景
				Background bg = new Background(new BackgroundFill(Color.YELLOW, null, null));
				label.setBackground(bg); // 設置標籤的背景
			}
		});
		flowPane.getChildren().add(btn1); // 往流式窗格上添加按鈕

 

運行以上的背景色設置代碼,單擊按鈕後的窗口界面以下圖所示,可見標籤區域的背景變爲黃色。字體


再來看標籤文字的顏色,JavaFX摒棄了所謂前景色的說法,轉而採納易於理解的文字顏色說法,也就是經過setTextFill方法設置文字顏色。下面是設置標籤文本顏色的代碼例子:3d

		Button btn2 = new Button("前景紅色"); // 建立一個按鈕
		btn2.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				label.setTextFill(Color.RED); // 設置標籤的文本顏色
			}
		});
		flowPane.getChildren().add(btn2); // 往流式窗格上添加按鈕

 

運行以上的文本顏色設置代碼,單擊按鈕後的窗口界面以下圖所示,可見標籤內部的文本顏色變爲紅色。htm


JavaFX的Label一樣支持中文字體,不過中文字體使用拼音表達,例如「KaiTi」表示楷體,「NSimSun」表示宋體,「FangSong」表示仿宋等等。下面是對標籤中的漢字設置中文楷體的代碼例子:對象

		Button btn3 = new Button("中文楷體"); // 建立一個按鈕
		btn3.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				// 建立一個40號大小且爲楷體的字體對象,適用於漢字。注意JavaFX不支持對中文設置斜體或粗體
				Font kaiti = Font.font("KaiTi", 40);
				label.setFont(kaiti); // 設置標籤的字體
			}
		});
		flowPane.getChildren().add(btn3); // 往流式窗格上添加按鈕

 

運行上面的字體設置代碼,單擊按鈕後的窗口界面以下圖所示,可見標籤內的漢字以楷體書寫,而且文字尺寸也變大了。blog


儘管JavaFX依然提供了粗體與斜體,惋惜它不支持對中文設置粗體或斜體,只能對英文設置粗體與斜體。下面是對標籤文本設置英文字體「Times New Roman」的代碼例子,同時一併應用了粗體與斜體:繼承

		Button btn4 = new Button("英文斜體"); // 建立一個按鈕
		btn4.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				label.setText("Hello World");
				// 建立一個40號大小且又是斜體又是粗體的字體對象,適用於英文。注意英文不能使用中文字體
				Font italic_bold = Font.font("Times New Roman", FontWeight.BOLD, FontPosture.ITALIC, 40);
				label.setFont(italic_bold); // 設置標籤的字體
			}
		});
		flowPane.getChildren().add(btn4); // 往流式窗格上添加按鈕

 

運行上面的字體設置代碼,單擊按鈕後的窗口界面以下圖所示,可見標籤內的英文果真呈現又粗又斜的面貌,幸好自己字體是規整的「Times New Roman」,還不至於扭得太難看。


再來看如何利用Label控件顯示圖像,完整的圖像顯示步驟分三步:
一、根據原始的圖片文件構建Image圖像實例;
二、依據Image圖像實例建立圖像視圖ImageView的實例;
三、調用Label控件的setGraphic設置該標籤的圖像視圖;
利用Label顯示圖像的詳細代碼以下所示:

		Button btn5 = new Button("顯示圖像"); // 建立一個按鈕
		btn5.setOnAction(new EventHandler<ActionEvent>() { // 設置按鈕的單擊事件
			@Override
			public void handle(ActionEvent arg0) { // 處理單擊事件
				// 建立一個圖像
				Image image = new Image(getClass().getResourceAsStream("apple.png"));
				label.setGraphic(new ImageView(image)); // 設置標籤的圖像
				label.setText(""); // 設置標籤的文本
			}
		});
		flowPane.getChildren().add(btn5); // 往流式窗格上添加按鈕

 

運行上面的圖像設置代碼,單擊按鈕後的窗口界面以下圖所示,可見此時的標籤控件妥妥地變爲一幅圖畫。

 



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

相關文章
相關標籤/搜索