一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - 初步了解javafx

初步了解javafx

2021-03-13 11:49過了即是客 JAVA教程

這篇文章主要介紹了初步了解javafx,具有一定借鑒價值,需要的朋友可以參考下

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表達式。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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函數為按鈕添加了點擊事件,當點擊按鈕的時候會顯示文本。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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屬性,它指定一個控制器,控制器的作用就是編寫界面對應的代碼。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?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注解進行標注。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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資源,其他部分沒有太大變化。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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文件在同一目錄下。

?
1
2
3
4
5
<gridpane>
  <stylesheets>
    <url value="@style.css"/>
  </stylesheets>
<gridpane/>

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

?
1
2
3
#btnshowpassword {
  -fx-background-color: deeppink;
}

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

?
1
2
<button id="btnshowpassword" text="顯示密碼"
        onaction="#showpasswordbutton"/>

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

初步了解javafx

總結

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

原文鏈接:http://blog.csdn.net/u011054333/article/details/77725614

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天天综合天天综合 | 四虎在线最新地址公告 | 国产自拍视频一区 | 99热99在线| 欧美一区二区三区不卡视频 | 国产大乳美女挤奶视频 | 日本视频在线免费观看 | 国产亚洲精aa在线观看香蕉 | 国产精品视频二区不卡 | 成人私人影院在线版 | 国产午夜免费秋霞影院 | 2022av小四郎的最新地址 | 成人猫咪maomiav永久网址 | 午夜小视频网站 | 精品第一国产综合精品蜜芽 | 22sihu国产精品视频影视资讯 | 日本一二线不卡在线观看 | a一级黄| 黑人video粗暴日本 | 国产亚洲精品aaa大片 | 色先锋影音先锋 | 精品国产理论在线观看不卡 | jazz欧美人免费xxxxxx | 国产精品久久久久一区二区三区 | 日产乱码卡一卡2卡三卡四福利 | 欧美成人tv | 99国产在线视频 | 四虎影视免费 | 超级乱淫伦小说全集np | 五月婷婷在线播放 | 久久99re2热在线播放7 | 超大阿力gaysex| 奇米色7777| 乳环调教 | 白丝女仆被啪到深夜漫画 | 亚欧洲乱码视频一二三区 | 9l桃色| 色噜噜 男人的天堂在线观看 | 色偷偷影院| 国产视频99 | 国产精品一区二区三 |