亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

初步了解javafx

2024-07-13 10:15:42
字體:
來源:轉載
供稿:網友

JavaFX 介紹

一提到Java的圖形界面庫,我們通常聽到的都是Swing,或者更老一點的AWT,包括很多書上面介紹的也都是這兩種。很多學校、培訓班教學的也是這兩種技術。但是其實這兩種技術都已經過時很長時間了。Swing雖然學起來也不算很難,但是用它來寫界面其實也很不好寫。因為它的界面和代碼沒有做到分離,所以在編寫的時候,代碼中肯定充斥著大量坐標,修改極其不易。這方面做的比較好的就是微軟的WPF,只能說誰用誰知道。

當然,雖然編寫客戶端圖形程序是Java的弱項,但是Java并沒有放棄這方面的努力。今天介紹的JavaFX就是Java在編寫圖形界面程序的最新技術。如果你準備使用Java編寫圖形界面程序,又沒有歷史包袱,那么強烈推薦使用JavaFX。

這是Oracle官網關于JavaFX的資源和文檔。

這是官方的示例程序,我們可以參考JavaFX的部分來學習如何使用。下面是其中一個分形的JavaFX程序,點擊上面的數字可以進入不同的微觀展示,感覺有一種看病毒微觀世界的感覺,很震撼。

javafx,可視化,界面開發

如何安裝

只要你安裝了最新版本的JDK 8,那么就可以使用JavaFX庫了。如果沒有安裝的話,那么趕快開始安裝吧。

快速上手

第一個程序

新建一個項目,然后編寫如下的類,然后編譯運行,即可看到結果。關于這個程序不用做解釋吧。如果有學習過Swing以及其他圖形界面框架的經驗的話,應該非常容易理解這段代碼。當然由于JavaFX是新東西,所以我也順便使用Java 8的新特性——lambda表達式。

package yitian.javafxsample;import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.layout.StackPane;import javafx.stage.Stage;public class HelloJavaFX extends Application {	@Override	  public void start(Stage primaryStage) throws Exception {		Button btn = new Button();		btn.setText("你好啊,世界");		btn.setOnAction(event -> {			System.out.println("你好,世界!");		}		);		StackPane root = new StackPane();		root.getChildren().add(btn);		Scene scene = new Scene(root, 300, 250);		primaryStage.setTitle("Hello World!");		primaryStage.setScene(scene);		primaryStage.show();	}	public static void main(String[] args) {		launch(args);	}}

運行截圖如下。

javafx,可視化,界面開發

用戶輸入

這個程序可以用來處理用戶登錄的情況,代碼如下,重要部分都添加了注釋。代碼的最后一部分使用setOnAction函數為按鈕添加了點擊事件,當點擊按鈕的時候會顯示文本。

public class UserInput extends Application {	@Override	  public void start(Stage primaryStage) throws Exception {		//網格布局		GridPane grid = new GridPane();		grid.setAlignment(Pos.CENTER);		//網格垂直間距		grid.setHgap(10);		//網格水平間距		grid.setVgap(10);		grid.setPadding(new Insets(25, 25, 25, 25));		//新建場景		Scene scene = new Scene(grid, 300, 275);		primaryStage.setScene(scene);		//添加標題		Text scenetitle = new Text("Welcome");		scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));		grid.add(scenetitle, 0, 0, 2, 1);		//添加標簽及文本框		Label userName = new Label("用戶名:");		grid.add(userName, 0, 1);		TextField userTextField = new TextField();		grid.add(userTextField, 1, 1);		//添加標簽及密碼框		Label pw = new Label("密碼:");		grid.add(pw, 0, 2);		PasswordField pwBox = new PasswordField();		grid.add(pwBox, 1, 2);		//添加提交按鈕		Button btn = new Button("登錄");		HBox hbBtn = new HBox(10);		hbBtn.setAlignment(Pos.BOTTOM_RIGHT);		hbBtn.getChildren().add(btn);		grid.add(hbBtn, 1, 4);		//提交文本提示		final Text actiontarget = new Text();		grid.add(actiontarget, 1, 6);		btn.setOnAction(event -> {			actiontarget.setFill(Color.FIREBRICK);			actiontarget.setText("已經登錄");		}		);		primaryStage.setTitle("JavaFX Welcome");		primaryStage.show();	}	public static void main(String[] args) {		launch(args);	}}

程序運行截圖如下。

javafx,可視化,界面開發

這個程序其實也沒什么難點,就是使用了網格布局,然后將每個元素添加到網格中。關于網格布局的屬性意義可以參考官方的圖。

javafx,可視化,界面開發

用FXML設計用戶界面

現代圖形界面框架都支持將界面和代碼分離開,而且比較常用的描述語言是XML,例如QT的QML、WPF的XAML,當然JavaFX也有類似的語言,叫做FXML。如果需要詳細了解FXML,可以參考Oracle官網的文章Introduction to FXML。

下面用FXML重寫一下上面那個小例子,每個部分都做了注釋。如果學習過其他類似描述語言的話,會發現這些其實都差不多。唯一需要注意的就是布局里面的fx:controller屬性,它指定一個控制器,控制器的作用就是編寫界面對應的代碼。

<?xml version="1.0" encoding="UTF-8"?><!--導入類--><?import javafx.geometry.Insets?><?import javafx.scene.control.*?><?import javafx.scene.layout.*?><?import javafx.scene.text.Font?><?import javafx.scene.text.Text?><!--設置布局--><GridPane xmlns="http://javafx.com/javafx"     xmlns:fx="http://javafx.com/fxml"     fx:controller="yitian.javafxsample.Controller"     prefHeight="400.0" prefWidth="600.0"     alignment="center" hgap="10" vgap="10">  <padding>    <Insets top="25" right="25" bottom="10" left="25"/>  </padding>  <!--歡迎文本-->  <Text text="Welcome"     GridPane.columnIndex="0" GridPane.rowIndex="0"     GridPane.columnSpan="2">    <font>      <Font name="Consolas" size="20"/>    </font>  </Text>  <Label text="用戶名:"      GridPane.columnIndex="0" GridPane.rowIndex="1"/>  <TextField      GridPane.columnIndex="1" GridPane.rowIndex="1"/>  <Label text="密碼:"      GridPane.columnIndex="0" GridPane.rowIndex="2"/>  <PasswordField fx:id="passwordField"          GridPane.columnIndex="1" GridPane.rowIndex="2"/>  <!--按鈕及提示文本-->  <HBox spacing="10" alignment="bottom_right"     GridPane.columnIndex="1" GridPane.rowIndex="4">    <Button text="顯示密碼"        onAction="#showPasswordButton"/>  </HBox>  <Text fx:id="hintText"     GridPane.columnIndex="0" GridPane.columnSpan="2"     GridPane.halignment="RIGHT" GridPane.rowIndex="6"/></GridPane>

下面就是這個FXML文件對應的控制器,它是一個標準的Java類。在FXML中用fx:id屬性指定的ID,可以在控制器中聲明為一個類字段,通過這個字段就可以和界面組件進行交互。同樣道理,onAction聲明的事件處理程序,在控制器中就是一個方法。注意這些字段和方法都需要使用@FXML注解進行標注。

import javafx.event.ActionEvent;import javafx.fxml.FXML;import javafx.scene.control.PasswordField;import javafx.scene.text.Text;public class Controller {	@FXML	  private Text hintText;	@FXML	  private PasswordField passwordField;	@FXML	  protected void showPasswordButton(ActionEvent event) {		hintText.setText("顯示密碼:" + passwordField.getText());	}}

最后要做修改的就是主程序了。在主程序中需要使用FXMLLoader來加載FXML資源,其他部分沒有太大變化。

public class UseFxml extends Application {	@Override	  public void start(Stage primaryStage) throws Exception {		Parent root = FXMLLoader.load(getClass().getResource("ui.fxml"));		Scene scene = new Scene(root, 300, 275);		primaryStage.setTitle("使用FXML");		primaryStage.setScene(scene);		primaryStage.show();	}	public static void main(String[] args) {		launch(args);	}}

程序運行截圖如下。

javafx,可視化,界面開發

如果希望修改組件樣式,JavaFX提供了CSS接口,讓我們可以直接使用CSS文件修改樣式。首先需要在FXML文件中添加相應樣式表的引用。文件名前面的@表示這個CSS文件和FXML文件在同一目錄下。

<GridPane>  <stylesheets>    <URL value="@style.css"/>  </stylesheets><GridPane/>

樣式表和普通的樣式表差不多,只不過需要添加JavaFX特有的前綴-fx-。

#btnShowPassword {  -fx-background-color: deeppink;}

上面用了ID選擇器,所以對應地,在FXML中也需要ID屬性。

<Button id="btnShowPassword" text="顯示密碼"        onAction="#showPasswordButton"/>

自定義之后的程序如圖所示。這里只簡單修改了一下按鈕的背景色,其實可以更改的樣式有很多,包括程序背景等等,有興趣的同學可以自行嘗試。

javafx,可視化,界面開發

總結

以上就是本文關于初步了解javafx的全部內容,如果有同學想使用Java編寫圖形界面程序,可以考慮使用JavaFX,這是一個很不錯的選擇。希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大片大片在线播放| 自拍偷拍亚洲区| 亚洲精品wwww| 国产精品女视频| 国产精品久久久久久中文字| 国产精品久久在线观看| 精品国产鲁一鲁一区二区张丽| 欧美性猛交xxxx乱大交| 国产亚洲精品久久久久久牛牛| 亚洲欧美一区二区三区在线| 日韩中文字幕不卡视频| 成人中文字幕在线观看| 欧美视频免费在线观看| 日韩高清欧美高清| 中文字幕久久久av一区| 欧美最顶级的aⅴ艳星| 日韩中文字幕在线看| 久久精品视频播放| 日韩欧美视频一区二区三区| 亚洲欧美国产高清va在线播| 中国china体内裑精亚洲片| 中国china体内裑精亚洲片| 欧美日韩ab片| 日韩欧美成人精品| 亚洲男人第一av网站| 亚洲性夜色噜噜噜7777| 97在线日本国产| 欧美极品少妇与黑人| 91av中文字幕| 欧美电影第一页| 免费91麻豆精品国产自产在线观看| 欧美xxxx14xxxxx性爽| 国产成人综合精品| 92看片淫黄大片欧美看国产片| 成人黄色午夜影院| 国产精品爽爽爽| 日韩av免费一区| 国产亚洲欧洲高清| 欧美电影免费观看高清| 高清一区二区三区日本久| 欧美成人精品一区二区| 亚洲美女激情视频| 中文字幕亚洲一区在线观看| 亚洲精品电影久久久| 亚洲图片欧美午夜| 国模精品视频一区二区三区| 欧美天天综合色影久久精品| 亚洲国产成人在线播放| 国产精品自产拍在线观看| 国产精品pans私拍| 欧美专区日韩视频| 国产精品视频一区二区高潮| 国内精久久久久久久久久人| 欧洲永久精品大片ww免费漫画| 亚洲欧美一区二区三区在线| 精品亚洲一区二区三区| 亚洲综合在线做性| 欧美亚洲国产日韩2020| 奇门遁甲1982国语版免费观看高清| 性欧美长视频免费观看不卡| 成人欧美在线视频| 在线色欧美三级视频| 日本欧美中文字幕| 欧美日本国产在线| 亚洲天堂成人在线| 日韩成人在线观看| 亚洲精品一区二区在线| 亚洲偷欧美偷国内偷| 亚洲天天在线日亚洲洲精| 欧美精品一二区| 国产亚洲精品美女久久久| 尤物yw午夜国产精品视频| 91亚洲国产成人精品性色| 69av成年福利视频| 国产精品丝袜久久久久久高清| 欧美性猛交xxxx富婆弯腰| 在线成人激情黄色| 91久久久久久久久久久久久| 亚洲免费福利视频| 亚洲人成在线播放| 三级精品视频久久久久| 91精品综合久久久久久五月天| 国产精品日韩在线观看| 久久久噜噜噜久噜久久| 久久精品国产久精国产思思| 亚洲缚视频在线观看| 日韩av免费看| 国产精品视频网站| 大胆人体色综合| 国产亚洲欧美日韩一区二区| 国产精品爽爽爽爽爽爽在线观看| 国产噜噜噜噜久久久久久久久| 欧美性做爰毛片| 亚洲国产精品人人爽夜夜爽| 日韩国产欧美区| 亚洲男人的天堂在线播放| 国产成人一区二区在线| 中文字幕免费精品一区高清| 欧美自拍大量在线观看| 日韩在线视频观看正片免费网站| 日韩精品中文字| 日韩欧美亚洲一二三区| 日韩在线观看你懂的| 亚洲人成网站999久久久综合| 97久久久免费福利网址| 美女扒开尿口让男人操亚洲视频网站| 日韩欧美第一页| 日韩精品在线观看一区二区| 亚洲香蕉伊综合在人在线视看| 亚洲午夜色婷婷在线| 北条麻妃在线一区二区| 日韩电影免费观看在线| 社区色欧美激情 | 国产在线观看一区二区三区| 久久精品视频一| 欧美极品美女视频网站在线观看免费| 国产美女直播视频一区| 日本sm极度另类视频| 亚洲人成人99网站| 国产精品com| 国模精品系列视频| 亚洲国产高清高潮精品美女| 日本亚洲欧美成人| 国产精品欧美日韩久久| 国产精品中文在线| 亚洲国产成人精品电影| 最近2019中文免费高清视频观看www99| 日韩在线观看免费高清| 最近2019年日本中文免费字幕| 亚洲综合中文字幕68页| 综合网中文字幕| 日韩精品欧美国产精品忘忧草| 日韩精品在线免费观看| 亚洲电影在线观看| 亚洲无av在线中文字幕| 国产v综合ⅴ日韩v欧美大片| 中文字幕亚洲一区二区三区五十路| 国产精品ⅴa在线观看h| 久久久精品视频在线观看| 国精产品一区一区三区有限在线| 国产精品久久久久久久av电影| 欧美性猛交xxxx免费看漫画| 国产91精品最新在线播放| 午夜欧美不卡精品aaaaa| 国产精品成人久久久久| 欧美日韩视频在线| 中文字幕精品www乱入免费视频| 国产精品久久久久久久美男| 国产综合在线观看视频| 久久综合久久88| 成人午夜激情免费视频| 欧美成人免费在线视频| 日韩在线激情视频| 久久久伊人欧美| 欧美电影免费观看网站| 国产亚洲人成网站在线观看| 日韩av影院在线观看| 欧美极品欧美精品欧美视频| 欧美激情欧美狂野欧美精品| 亚洲最大福利网| 亚洲国产欧美精品| 亚洲第一综合天堂另类专| 精品国内亚洲在观看18黄| 亚洲国产成人久久综合|