激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 舌头伸进添的我好爽高潮网站 | 91重口视频 | 免费国产一级淫片 | 成人三区四区 | 久久免费视频3 | 激情小说激情图片激情电影 | 国产成人综合在线观看 | 私库av在线免费观看 | 黄视频网站免费在线观看 | 成人mm视频在线观看 | 国产成人在线一区二区 | av电影网站在线 | 亚洲二区不卡 | 91精品国产一区二区三区四区在线 | 黄色特级视频 | 欧美自拍三区 | 免费看毛片的网站 | 亚洲综合精品 | 香蕉在线播放 | 久久成人福利 | vidz 98hd | 成人毛片视频在线观看 | 国产成人综合在线观看 | 久久久久成人精品亚洲国产 | 欧美日韩电影在线 | 国产免费小视频在线观看 | 日韩精品一区二区在线播放 | 26uuu成人人网图片 | 久久精品国产99久久6动漫亮点 | 久久蜜桃香蕉精品一区二区三区 | 国产乱淫a∨片免费视频 | 91av亚洲| 特级黄一级播放 | 午夜视频在线观看免费视频 | 精品国产一区二区三区免费 | 草操视频 | 国产一区二区三区色淫影院 | 久久精品a一级国产免视看成人 | 日本a v免费观看 | 久久久av亚洲男天堂 | 久久国产精品99国产 |