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


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

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

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

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對象,詳細的背景設置代碼示例如下:

		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方法設置文字顏色。下面是設置標簽文本顏色的代碼例子:

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

 

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


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); // 往流式窗格上添加按鈕

 

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


盡管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控件顯示圖像,完整的圖像顯示步驟分三步:
1、根據原始的圖片文件構建Image圖像實例;
2、依據Image圖像實例創建圖像視圖ImageView的實例;
3、調用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開發筆記(序)章節目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM