最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

初步了解javafx

 更新時間:2017年12月29日 14:45:13   作者:過了即是客  
這篇文章主要介紹了初步了解javafx,具有一定借鑒價值,需要的朋友可以參考下

JavaFX 介紹

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

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

這是Oracle官網(wǎng)關(guān)于JavaFX的資源和文檔。

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

如何安裝

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

快速上手

第一個程序

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

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);
	}
}

運(yùn)行截圖如下。

用戶輸入

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

public class UserInput extends Application {
	@Override
	  public void start(Stage primaryStage) throws Exception {
		//網(wǎng)格布局
		GridPane grid = new GridPane();
		grid.setAlignment(Pos.CENTER);
		//網(wǎng)格垂直間距
		grid.setHgap(10);
		//網(wǎng)格水平間距
		grid.setVgap(10);
		grid.setPadding(new Insets(25, 25, 25, 25));
		//新建場景
		Scene scene = new Scene(grid, 300, 275);
		primaryStage.setScene(scene);
		//添加標(biāo)題
		Text scenetitle = new Text("Welcome");
		scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
		grid.add(scenetitle, 0, 0, 2, 1);
		//添加標(biāo)簽及文本框
		Label userName = new Label("用戶名:");
		grid.add(userName, 0, 1);
		TextField userTextField = new TextField();
		grid.add(userTextField, 1, 1);
		//添加標(biāo)簽及密碼框
		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("已經(jīng)登錄");
		}
		);
		primaryStage.setTitle("JavaFX Welcome");
		primaryStage.show();
	}
	public static void main(String[] args) {
		launch(args);
	}
}

程序運(yùn)行截圖如下。

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

用FXML設(shè)計用戶界面

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

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

<?xml version="1.0" encoding="UTF-8"?>
<!--導(dǎo)入類-->
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<!--設(shè)置布局-->
<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文件對應(yīng)的控制器,它是一個標(biāo)準(zhǔn)的Java類。在FXML中用fx:id屬性指定的ID,可以在控制器中聲明為一個類字段,通過這個字段就可以和界面組件進(jìn)行交互。同樣道理,onAction聲明的事件處理程序,在控制器中就是一個方法。注意這些字段和方法都需要使用@FXML注解進(jìn)行標(biāo)注。

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);
	}
}

程序運(yùn)行截圖如下。

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • 詳談java線程與線程、進(jìn)程與進(jìn)程間通信

    詳談java線程與線程、進(jìn)程與進(jìn)程間通信

    下面小編就為大家?guī)硪黄斦刯ava線程與線程、進(jìn)程與進(jìn)程間通信。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • SpringBoot?整合?Elasticsearch?實現(xiàn)海量級數(shù)據(jù)搜索功能

    SpringBoot?整合?Elasticsearch?實現(xiàn)海量級數(shù)據(jù)搜索功能

    這篇文章主要介紹了SpringBoot?整合?Elasticsearch?實現(xiàn)海量級數(shù)據(jù)搜索,本文主要圍繞?SpringBoot?整合?ElasticSearch?接受數(shù)據(jù)的插入和搜索使用技巧,在實際的使用過程中,版本號尤其的重要,不同版本的?es,對應(yīng)的?api?是不一樣,需要的朋友可以參考下
    2022-07-07
  • Java中RabbitMQ延遲隊列實現(xiàn)詳解

    Java中RabbitMQ延遲隊列實現(xiàn)詳解

    這篇文章主要介紹了Java中RabbitMQ延遲隊列實現(xiàn)詳解,消息過期后,根據(jù)routing-key的不同,又會被死信交換機(jī)路由到不同的死信隊列中,消費(fèi)者只需要監(jiān)聽對應(yīng)的死信隊列進(jìn)行消費(fèi)即可,需要的朋友可以參考下
    2023-09-09
  • springboot-mysql-HikariCP集成過程

    springboot-mysql-HikariCP集成過程

    HiKariCP opens new window是數(shù)據(jù)庫連接池的一個后起之秀,號稱性能最好,可以完美地 PK 掉其他連接池,這篇文章主要介紹了springboot-mysql-HikariCP集成過程,需要的朋友可以參考下
    2023-07-07
  • SpringBoot整合Netty+Websocket實現(xiàn)消息推送的示例代碼

    SpringBoot整合Netty+Websocket實現(xiàn)消息推送的示例代碼

    WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù),本文主要介紹了SpringBoot整合Netty+Websocket實現(xiàn)消息推送的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Java8并發(fā)新特性CompletableFuture

    Java8并發(fā)新特性CompletableFuture

    這篇文章主要介紹了Java8并發(fā)新特性CompletableFuture,CompletableFuture針對Future接口做了改進(jìn),相比Callable/Runnable接口它支持多任務(wù)進(jìn)行鏈?zhǔn)秸{(diào)用、組合、多任務(wù)并發(fā)處理,下面文章更多相關(guān)內(nèi)容得介紹,需要的小伙伴可以參考一下
    2022-06-06
  • Java從入門到精通之旅類和對象全面解析

    Java從入門到精通之旅類和對象全面解析

    Java是一門純面向?qū)ο蟮恼Z言(OOP),在面向?qū)ο蟮氖澜缋?一切皆為對象,面向?qū)ο笫墙鉀Q問題的一種思想,主要依靠對象之間的交互完成一件事情,這篇文章主要介紹了Java從入門到精通之旅類和對象全面解析,需要的朋友可以參考下
    2025-04-04
  • MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對應(yīng)關(guān)系說明

    MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對應(yīng)關(guān)系說明

    這篇文章主要介紹了MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對應(yīng)關(guān)系說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 使用RequestBodyAdvice實現(xiàn)對Http請求非法字符過濾

    使用RequestBodyAdvice實現(xiàn)對Http請求非法字符過濾

    這篇文章主要介紹了使用RequestBodyAdvice實現(xiàn)對Http請求非法字符過濾的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • IDEA之翻譯器的使用Translation

    IDEA之翻譯器的使用Translation

    這篇文章主要介紹了IDEA之翻譯器的使用Translation,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

通江县| 六盘水市| 祁连县| 威信县| 澳门| 中宁县| 福海县| 子洲县| 德保县| 五台县| 北碚区| 开原市| 泾源县| 沂水县| 桃园县| 溧阳市| 阳西县| 石景山区| 乐山市| 城步| 蚌埠市| 上林县| 六盘水市| 铁岭县| 仪征市| 逊克县| 寻乌县| 西畴县| 大荔县| 抚松县| 瓦房店市| 利川市| 忻城县| 定日县| 施甸县| 尚志市| 盘锦市| 若尔盖县| 和静县| 云和县| 镇安县|