




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JaVa程序設(shè)計(jì)任務(wù)式教程01任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能02任務(wù)7-2模擬購(gòu)物結(jié)賬功能04任務(wù)7-4使用FXML實(shí)現(xiàn)購(gòu)物滿意度問(wèn)卷調(diào)查目錄CONTNETS單元七
JavaFX圖形用戶界面03任務(wù)7-3購(gòu)物滿意度問(wèn)卷調(diào)查單元目標(biāo)能夠創(chuàng)建第一個(gè)JavaFX程序。能夠使用JavaFX屬性與屬性綁定模擬購(gòu)物車(chē)添加商品的功能。能夠使用JavaFX常用布局與事件處理模擬購(gòu)物結(jié)賬功能。能夠使用JavaFX基礎(chǔ)控件與列表控件實(shí)現(xiàn)購(gòu)物滿意度問(wèn)卷調(diào)查。能夠使用FXML實(shí)現(xiàn)購(gòu)物滿意度問(wèn)卷調(diào)查。培養(yǎng)學(xué)生在JavaFX應(yīng)用程序的設(shè)計(jì)和開(kāi)發(fā)中運(yùn)用創(chuàng)新思維,創(chuàng)造出具有獨(dú)特性和競(jìng)爭(zhēng)力的產(chǎn)品。培養(yǎng)學(xué)生保持對(duì)JavaFX及其相關(guān)技術(shù)棧的關(guān)注和學(xué)習(xí),不斷提升學(xué)生的技術(shù)水平和專業(yè)素養(yǎng)。知識(shí)目標(biāo)能力目標(biāo)素養(yǎng)目標(biāo)學(xué)習(xí)目標(biāo)理解JavaFX舞臺(tái)、場(chǎng)景、場(chǎng)景圖和節(jié)點(diǎn)。掌握第一個(gè)JavaFX程序的創(chuàng)建方式,以及JavaFX屬性與屬性綁定的方式。掌握J(rèn)avaFX常用布局的使用方式,以及JavaFX的事件處理機(jī)制與動(dòng)作事件的處理。掌握J(rèn)avaFX基礎(chǔ)控件、列表控件與菜單控件。掌握FXML文件的基本結(jié)構(gòu),以及FXML與Java代碼的交互方式。01任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能JavaFX簡(jiǎn)介舞臺(tái)和場(chǎng)景場(chǎng)景圖和節(jié)點(diǎn)第一個(gè)JavaFX程序JavaFX屬性JavaFX屬性綁定任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX基礎(chǔ)JavaFX簡(jiǎn)介Sun公司在2007年推出了JavaFX技術(shù)實(shí)現(xiàn)GUI的開(kāi)發(fā),它運(yùn)行在JVM上,使用自己的編程語(yǔ)言,成為JavaFXScript。JavaFX是一個(gè)功能強(qiáng)大的JavaGUI工具包,它提供了豐富的圖形和多媒體API,使得開(kāi)發(fā)者能夠創(chuàng)建出具有動(dòng)態(tài)效果和豐富交互性的桌面和移動(dòng)應(yīng)用程序任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX基礎(chǔ)舞臺(tái)和場(chǎng)景在JavaFX中,舞臺(tái)(Stage)和場(chǎng)景(Scene)是兩個(gè)核心的概念,它們共同構(gòu)成了JavaFX應(yīng)用程序的用戶界面。舞臺(tái)是JavaFX應(yīng)用程序的頂級(jí)容器,代表了應(yīng)用程序的主窗口,它是用戶與應(yīng)用程序進(jìn)行交互的窗口界面,處理諸如窗口的最小化、最大化、關(guān)閉等操作,同時(shí)能夠控制應(yīng)用程序的外觀和行為。一個(gè)JavaFX應(yīng)用程序可以有多個(gè)舞臺(tái),但通常只有一個(gè)主舞臺(tái),場(chǎng)景是JavaFX應(yīng)用程序中的一個(gè)可視化容器,用于承載各種用戶界面元素,如按鈕、標(biāo)簽、文本框等。場(chǎng)景可以包含在舞臺(tái)中,也可以在舞臺(tái)之間進(jìn)行切換。一個(gè)JavaFX應(yīng)用程序中可以包含多個(gè)場(chǎng)景,每個(gè)場(chǎng)景可以有自己的布局和控件。任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX基礎(chǔ)舞臺(tái)和場(chǎng)景控制舞臺(tái)的外觀和行為的常用方法有以下3個(gè),具體介紹如下setTitle(Stringtitle):設(shè)置舞臺(tái)的標(biāo)題。setScene(Scenescene):設(shè)置舞臺(tái)的場(chǎng)景。show():顯示舞臺(tái)。場(chǎng)景通常通過(guò)其構(gòu)造函數(shù)來(lái)創(chuàng)建,指定其根節(jié)點(diǎn)、寬和高等屬性。創(chuàng)建場(chǎng)景的構(gòu)造函數(shù)有以下3個(gè),具體介紹如下Scene(Parentroot):使用指定的根節(jié)點(diǎn)創(chuàng)建一個(gè)場(chǎng)景對(duì)象,根節(jié)點(diǎn)對(duì)象可以是任何的Parent對(duì)象,通常使用某種面板(布局)對(duì)象作為根節(jié)點(diǎn)。Scene(Parentroot,doublewidth,doubleheight):創(chuàng)建一個(gè)場(chǎng)景對(duì)象,width和height參數(shù)分別指定場(chǎng)景的寬度和高度。Scene(Parentroot,doublewidth,doubleheight,Paintfill):創(chuàng)建一個(gè)場(chǎng)景對(duì)象,fill指定場(chǎng)景的背景填充顏色。任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX基礎(chǔ)舞臺(tái)和場(chǎng)景舞臺(tái)、場(chǎng)景、面板和控件之間的關(guān)系是舞臺(tái)是窗口,場(chǎng)景是舞臺(tái)上的內(nèi)容,面板是場(chǎng)景中的容器,控件是面板上的交互元素。舞臺(tái)、場(chǎng)景、面板和控件的關(guān)系如圖任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX基礎(chǔ)場(chǎng)景圖和節(jié)點(diǎn)JavaFX的圖形用戶界面通常稱為場(chǎng)景圖,場(chǎng)景圖是一個(gè)層次化的樹(shù)形結(jié)構(gòu),其中每個(gè)節(jié)點(diǎn)(Node)都是這個(gè)結(jié)構(gòu)的一部分。這些節(jié)點(diǎn)可以是可視化的元素,例如矩形、圓形、文本或圖像等,也可以是容器節(jié)點(diǎn)在JavaFX應(yīng)用程序中,通常會(huì)創(chuàng)建一個(gè)Scene對(duì)象,它是場(chǎng)景圖的根。然后,開(kāi)發(fā)者會(huì)將各種節(jié)點(diǎn)添加到這個(gè)場(chǎng)景中,從而構(gòu)建出完整的GUI。這些節(jié)點(diǎn)可以通過(guò)CSS進(jìn)行樣式化,并可以添加事件處理器來(lái)處理用戶交互。此外,JavaFX還提供了FXML,它是一種基于XML的語(yǔ)言,用于聲明性地定義場(chǎng)景圖任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX基礎(chǔ)第一個(gè)JavaFX程序JavaFX的圖形用戶界面通常稱為場(chǎng)景圖,場(chǎng)景圖是一個(gè)層次化的樹(shù)形結(jié)構(gòu),其中每個(gè)節(jié)點(diǎn)(Node)都是這個(gè)結(jié)構(gòu)的一部分。這些節(jié)點(diǎn)可以是可視化的元素,例如矩形、圓形、文本或圖像等,也可以是容器節(jié)點(diǎn)在JavaFX應(yīng)用程序中,通常會(huì)創(chuàng)建一個(gè)Scene對(duì)象,它是場(chǎng)景圖的根。然后,開(kāi)發(fā)者會(huì)將各種節(jié)點(diǎn)添加到這個(gè)場(chǎng)景中,從而構(gòu)建出完整的GUI。這些節(jié)點(diǎn)可以通過(guò)CSS進(jìn)行樣式化,并可以添加事件處理器來(lái)處理用戶交互。此外,JavaFX還提供了FXML,它是一種基于XML的語(yǔ)言,用于聲明性地定義場(chǎng)景圖任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX基礎(chǔ)第一個(gè)JavaFX程序如例7-1所示,首先在Eclipse中創(chuàng)建名為Chapter07的程序,在該程序的src文件夾中創(chuàng)建名為com.example.gui包,然后在該包中創(chuàng)建ExampleHello類(lèi)繼承Application類(lèi),詳見(jiàn)ExampleHello.java1packagecom.example.gui;2importjavafx.application.Application;3importjavafx.scene.Scene;4importjavafx.scene.control.Label;5importjavafx.scene.layout.StackPane;6importjavafx.stage.Stage;7publicclassExampleHelloextendsApplication{8 @Override9 publicvoidstart(StageprimaryStage)throwsException{10 Labellabel=newLabel("第一個(gè)JavaFX程序");//創(chuàng)建一個(gè)標(biāo)簽
11 StackPanerootNode=newStackPane();//創(chuàng)建面板作為根節(jié)點(diǎn)
12 rootNode.getChildren().add(label);//將標(biāo)簽添加到根節(jié)點(diǎn)上
13 //創(chuàng)建場(chǎng)景,場(chǎng)景的寬為300像素,高為150像素,將根節(jié)點(diǎn)設(shè)置到場(chǎng)景中
14 Scenescene=newScene(rootNode,300,150);15 primaryStage.setScene(scene);//將場(chǎng)景設(shè)置到舞臺(tái)中
16 primaryStage.setTitle("JavaFX程序");//設(shè)置舞臺(tái)窗口標(biāo)題
17 primaryStage.show();//顯示舞臺(tái)窗口
18 }19 publicstaticvoidmain(String[]args){20 launch(args);//啟動(dòng)JavaFX程序
21 }22}任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX基礎(chǔ)第一個(gè)JavaFX程序上述代碼中,Application類(lèi)是JavaFX應(yīng)用程序的入口點(diǎn)。當(dāng)創(chuàng)建一個(gè)JavaFX應(yīng)用程序時(shí),創(chuàng)建的類(lèi)需要繼承Application類(lèi)并重寫(xiě)start()方法,以便設(shè)置和顯示用戶界面。Application類(lèi)的生命周期有3個(gè)方法,分別是init()方法、start()方法和stop()方法,這3個(gè)方法的具體介紹如下所示。
init()方法:應(yīng)用程序初始化方法,用于執(zhí)行各種初始化操作,但是不能創(chuàng)建舞臺(tái)和場(chǎng)景對(duì)象,如果程序沒(méi)有初始化部分,可以不需要重寫(xiě)該方法。
start()方法:調(diào)用init()方法后,會(huì)調(diào)用該方法開(kāi)始執(zhí)行程序,在該方法中可構(gòu)建和設(shè)置場(chǎng)景。該方法是抽象方法,必須要重寫(xiě)。
stop()方法:應(yīng)用程序停止方法,在該方法中可以釋放和關(guān)閉有關(guān)資源,如果沒(méi)有動(dòng)作執(zhí)行,不需要重寫(xiě)該方法。當(dāng)運(yùn)行JavaFX應(yīng)用程序時(shí),需要定義一個(gè)main()方法,在該方法中調(diào)用launch()方法啟動(dòng)JavaFX應(yīng)用程序,launch()方法不僅創(chuàng)建Application類(lèi)的實(shí)例,還調(diào)用start()方法。任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX屬性與綁定JavaFX屬性JavaFX提供了一種強(qiáng)大的屬性機(jī)制,允許開(kāi)發(fā)者創(chuàng)建響應(yīng)式用戶界面。JavaFX提供了各種Property子類(lèi)來(lái)創(chuàng)建屬性,這些子類(lèi)提供了get()和set()方法來(lái)獲取和設(shè)置屬性的值。根據(jù)屬性值的數(shù)據(jù)類(lèi)型不同,屬性的類(lèi)型也會(huì)有所不同,對(duì)于數(shù)據(jù)類(lèi)型double、float、int、String等對(duì)應(yīng)的屬性類(lèi)型為DoubleProperty、FloatProperty、IntegerProperty、StringProperty;對(duì)于集合類(lèi)型List、Set和Map對(duì)應(yīng)的屬性類(lèi)型為L(zhǎng)istProperty、SetProperty、MapProperty;所有這些屬性類(lèi)型都為抽象類(lèi),它們對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)為SimpleXxxProperty,例如StringProperty對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)SimpleStringProperty,這些實(shí)現(xiàn)類(lèi)都定義在perty包中,通過(guò)這些實(shí)現(xiàn)類(lèi)可以創(chuàng)建不同數(shù)據(jù)類(lèi)型的屬性。任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX屬性與綁定JavaFX屬性1.導(dǎo)入包假設(shè)創(chuàng)建一個(gè)字符串類(lèi)型的屬性,我們首先需要導(dǎo)入SimpleStringProperty類(lèi)對(duì)應(yīng)的包,示例代碼如下。importperty.SimpleStringProperty;2.創(chuàng)建屬性使用SimpleStringProperty類(lèi)創(chuàng)建屬性,假設(shè)創(chuàng)建一個(gè)字符串類(lèi)型的屬性name,示例代碼如下。//第一種方式創(chuàng)建屬性SimpleStringPropertyname=newSimpleStringProperty(this,"myStringProperty","");//第二種方式創(chuàng)建屬性SimpleStringPropertyname=newSimpleStringProperty();任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX屬性與綁定JavaFX屬性3.獲取和設(shè)置屬性值使用get()和set()方法獲取和設(shè)置屬性的值,示例代碼如下。StringcurrentName=name.get();//獲取屬性name的值name.set("小明");//設(shè)置屬性name的值4.監(jiān)聽(tīng)屬性值的變化通過(guò)調(diào)用addListener()方法來(lái)監(jiān)聽(tīng)屬性值的變化,示例代碼如下。name.addListener((observable,oldValue,newValue)->{ System.out.println("name的改變從"+oldValue+"改變?yōu)?+newValue);});上述示例代碼中,oldValue表示修改之前的屬性值,newValue表示新屬性值。任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX屬性與綁定JavaFX屬性綁定JavaFX屬性可以與其他屬性或表達(dá)式進(jìn)行綁定,以便當(dāng)原始屬性的值發(fā)生變化時(shí),綁定屬性的值也會(huì)自動(dòng)更新。假設(shè)將創(chuàng)建的anotherProperty的值與前面創(chuàng)建的屬性name的值綁定在一起,需要使用bind()方法,示例代碼如下SimpleStringPropertyanotherProperty=newSimpleStringProperty();//將name的值與anotherProperty的值綁定在一起name.bind(anotherProperty);需要注意的是,在綁定屬性之前,需要確保沒(méi)有監(jiān)聽(tīng)器或約束在嘗試改變屬性的值,否則可能會(huì)導(dǎo)致循環(huán)依賴或無(wú)限循環(huán)。如果之前綁定了屬性,現(xiàn)在需要解除綁定,可以使用unbind()方法,示例代碼如下name.unbind();//解綁屬性任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX屬性與綁定JavaFX屬性綁定如例7-2所示,通過(guò)一個(gè)例子演示屬性的綁定,首先在創(chuàng)建ExampleProperty類(lèi),在該類(lèi)中通過(guò)屬性綁定監(jiān)聽(tīng)屬性值的變化。詳見(jiàn)ExampleProperty.java1packagecom.example.gui;2importperty.StringProperty;3importperty.SimpleStringProperty;4publicclassExampleProperty{5 publicstaticvoidmain(String[]args){6//創(chuàng)建兩個(gè)SimpleStringProperty實(shí)例
7StringPropertyanotherProperty=newSimpleStringProperty();8StringPropertyname=newSimpleStringProperty();9name.addListener((observable,oldValue,newValue)->{10 System.out.println("name屬性的值從"+oldValue+11"改變?yōu)?+newValue);12});13//將name屬性與anotherProperty屬性綁定在一起
14name.bind(anotherProperty);15//改變anotherProperty屬性的值
16anotherProperty.set("小明");17//輸出name屬性的值
18System.out.println("name屬性的值為"+name.get());19}20}任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-JavaFX屬性與綁定JavaFX屬性綁定屬性基本用法例子的運(yùn)行結(jié)果如圖1.在Chapter07程序中創(chuàng)建com.example.task包,用于存放本單元中每個(gè)任務(wù)的代碼文件。2.在com.example.task包中創(chuàng)建ShoppingCartApp類(lèi),用于實(shí)現(xiàn)購(gòu)物車(chē)添加商品的功能。3.定義2個(gè)SimpleIntegerProperty類(lèi)型的屬性totalNum與cardNum,分別用于存儲(chǔ)商品購(gòu)買(mǎi)的總數(shù)量與購(gòu)物車(chē)中商品的總數(shù)量。4.調(diào)用addListener()方法監(jiān)聽(tīng)商品購(gòu)買(mǎi)總數(shù)量的屬性totalNum。5.調(diào)用nextInt()方法輸入要購(gòu)買(mǎi)的商品(牙刷與毛巾)的數(shù)量。6.調(diào)用bind()方法將屬性totalNum與cardNum綁定在一起。7.調(diào)用set()方法改變屬性cardNum的值,并調(diào)用println()方法輸出屬性cardNum的值。代碼參考教材中的ShoppingCartApp.java任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-任務(wù)實(shí)現(xiàn)運(yùn)行上述程序,控制臺(tái)會(huì)輸出要購(gòu)買(mǎi)牙刷與毛巾數(shù)量的提示信息,輸入完要購(gòu)買(mǎi)的數(shù)量之后,按下Enter鍵,程序會(huì)計(jì)算購(gòu)物車(chē)中商品的總數(shù)量,控制臺(tái)輸出的信息如圖任務(wù)7-1模擬購(gòu)物車(chē)添加商品功能-任務(wù)實(shí)現(xiàn)02任務(wù)7-2模擬購(gòu)物結(jié)賬功能水平布局垂直布局網(wǎng)格布局流式布局其他布局事件處理機(jī)制動(dòng)作事件處理任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局水平布局在JavaFX中,水平布局是使用HBox(HorizontalBox)類(lèi)來(lái)實(shí)現(xiàn)的,水平布局中可以添加多個(gè)控件,這些控件都是按照水平方向(從左到右)排列的。HBox類(lèi)中常用的構(gòu)造方法如下所示HBox(doublespacing):創(chuàng)建一個(gè)水平布局,spacing用于指定布局中控件之間的間距。HBox(Node·children):創(chuàng)建一個(gè)水平布局,children用于指定布局中包含的控件。HBox(doublespacing,Node...children):創(chuàng)建一個(gè)水平布局,并指定布局中的控件與控件之間的間距。常用的方法如下所示。setPadding(Insetsvalue):設(shè)置水平布局中控件與布局邊界之間的距離,參數(shù)Insets分別指定上、右、下、左間距,默認(rèn)值是Insets.EMPTY。setSpacing(doublevalue):設(shè)置水平布局中控件之間的間距。setStyle(Stringvalue):設(shè)置水平布局的樣式,類(lèi)似于HTML元素的style屬性。如例7-3所示,演示水平布局,首先在Chapter07程序的com.example.gui包中創(chuàng)建ExampleHorizontalLayout類(lèi),在該類(lèi)中演示JavaFX的水平布局,詳見(jiàn)ExampleHorizontalLayout.java任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局1packagecom.example.gui;2......//省略導(dǎo)入包
3publicclassExampleHorizontalLayoutextendsApplication{4 @Override5 publicvoidstart(StageprimaryStage)throwsException{6 //創(chuàng)建一個(gè)BorderPane作為根布局
7 BorderPanerootPane=newBorderPane();8 HBoxhBox=newHBox();//創(chuàng)建水平布局
9 //設(shè)置布局邊界的上、右、下、左與布局中控件之間的間距
10 hBox.setPadding(newInsets(10,8,10,8));11 hBox.setStyle("-fx-background-color:#445588;");12 hBox.getChildren().addAll(newLabel("水平布局"),13newButton("按鈕1"),newButton("按鈕2"));14 rootPane.setTop(hBox);15 //創(chuàng)建場(chǎng)景并添加到舞臺(tái)
16 Scenescene=newScene(rootPane,250,100);17 primaryStage.setScene(scene);18 primaryStage.setTitle("水平布局");19 primaryStage.show();20 }21 publicstaticvoidmain(String[]args){22 launch(args);23 }24}水平布局的運(yùn)行結(jié)果如圖任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局垂直布局垂直布局是使用VBox(VerticalBox)類(lèi)來(lái)實(shí)現(xiàn)的,垂直布局中可以添加多個(gè)控件,這些控件都是按照垂直方向(從上到下)排列的。VBox類(lèi)中定義的構(gòu)造方法、屬性各種常用方法與HBox類(lèi)中的類(lèi)似任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局垂直布局如例7-4所示,演示垂直布局,首先在Chapter07程序的com.example.gui包中創(chuàng)建ExampleVerticalLayout類(lèi),在該類(lèi)中演示JavaFX的垂直布局,詳見(jiàn)ExampleVerticalLayout.java1packagecom.example.gui;2......//省略導(dǎo)入包
3publicclassExampleVerticalLayoutextendsApplication{4 @Override5 publicvoidstart(StageprimaryStage)throwsException{6 //創(chuàng)建一個(gè)BorderPane作為根布局
7BorderPanerootPane=newBorderPane();8//使用垂直布局
9VBoxleftBox=newVBox(10);//垂直間距10像素
10leftBox.setAlignment(Pos.TOP_LEFT);11leftBox.getChildren().addAll(12newLabel("垂直布局"),13newButton("按鈕1"),14newButton("按鈕2")15);16rootPane.setLeft(leftBox);17//創(chuàng)建場(chǎng)景并添加到舞臺(tái)
18Scenescene=newScene(rootPane,250,100);19primaryStage.setScene(scene);20primaryStage.setTitle("垂直布局");21primaryStage.show();22 }23 publicstaticvoidmain(String[]args){24 launch(args);25 }26}任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局垂直布局垂直布局的運(yùn)行結(jié)果如圖任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局網(wǎng)絡(luò)布局在JavaFX中,網(wǎng)格布局是一種通過(guò)創(chuàng)建二維網(wǎng)格來(lái)排列和管理子組件的布局方式,由GridPane類(lèi)實(shí)現(xiàn)。網(wǎng)格布局非常靈活,允許精確控制組件在網(wǎng)格中的位置和大小。任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局網(wǎng)絡(luò)布局GridPane類(lèi)只有一個(gè)默認(rèn)的構(gòu)造方法,創(chuàng)建GridPane對(duì)象后可以設(shè)置它的屬性,常用的方法如下
setHgap(doublevalue):設(shè)置控件水平間距。
setVgap(doublevalue):設(shè)置控件垂直間距。
setPadding(Insetsvalue):設(shè)置內(nèi)容與邊界的距離。
add(Nodechild,intcolumnIndex,introwIndex):將控件添加到指定的單元格中。columnIndex與rowIndex分別為單元格列號(hào)和行號(hào),網(wǎng)格窗口中左上角單元格的列號(hào)和行號(hào)為0。
add(Nodechild,intcolumnIndex,introwIndex,intcolspan,introwspan):將控件添加到指定的單元格中。該方法用于一個(gè)控件占用多個(gè)單元格的情況,colspan為控件跨越的列數(shù),rowspan為控件跨越的行數(shù)。
setConstraints(Nodechild,intcolumnIndex,introwIndex):將控件添加到指定的單元格中。
setConstraints(Nodechild,intcolumnIndex,introwIndex,int,colspan,introwspan):將控件添加到多個(gè)單元格中。
setGridLinesVisible(Booleanvalue):設(shè)置是否顯示網(wǎng)格線,默認(rèn)值為false,表示不顯示網(wǎng)格線。任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局網(wǎng)絡(luò)布局如例7-5所示,演示網(wǎng)格布局,首先在Chapter07程序的com.example.gui包中創(chuàng)建ExampleGridLayout類(lèi),在該類(lèi)中演示JavaFX的網(wǎng)格布局,詳見(jiàn)ExampleGridLayout.java1packagecom.example.gui;2......//省略導(dǎo)入包
3publicclassExampleGridLayoutextendsApplication{4 @Override5 publicvoidstart(StageprimaryStage)throwsException{6 //創(chuàng)建一個(gè)BorderPane作為根布局
7BorderPanerootPane=newBorderPane();8//使用網(wǎng)格布局
9GridPanecenterGrid=newGridPane();10centerGrid.setHgap(10);//網(wǎng)格之間的水平間距10像素
11centerGrid.setVgap(10);//網(wǎng)格之間的垂直間距10像素
12centerGrid.setAlignment(Pos.CENTER);13centerGrid.add(newButton("網(wǎng)格按鈕1"),0,0);14centerGrid.add(newButton("網(wǎng)格按鈕2"),1,0);15centerGrid.add(newButton("網(wǎng)格按鈕3"),0,1);16centerGrid.add(newButton("網(wǎng)格按鈕4"),1,1);17rootPane.setCenter(centerGrid);18//創(chuàng)建場(chǎng)景并添加到舞臺(tái)
19Scenescene=newScene(rootPane,250,100);20primaryStage.setScene(scene);21primaryStage.setTitle("網(wǎng)格布局");22primaryStage.show();23}24publicstaticvoidmain(String[]args){25launch(args);26}27}任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局網(wǎng)絡(luò)布局網(wǎng)格布局的運(yùn)行結(jié)果如圖任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局流式布局流式布局是指布局中的元素按照其在流中的順序排列,當(dāng)元素填滿一行或一列時(shí),它會(huì)移動(dòng)到下一行或列,可以設(shè)置布局的行和列的間距,也可以設(shè)置布局邊與節(jié)點(diǎn)之間的距離。FlowPane類(lèi)常用的構(gòu)造方法如下所示。
FlowPane(doublehgap,doublevgap):創(chuàng)建一個(gè)流式布局,并指定子控件之間的水平間距和垂直間距。
FlowPane(doublehgap,doublevgap,Node···children):創(chuàng)建一個(gè)流式布局,指定控件之間的水平和垂直間距,還指定包含的初始子控件。
FlowPane(Orientationorientation):創(chuàng)建一個(gè)流式布局,并指定子控件排列的方向(水平或垂直),以及控件之間間距為0。任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局流式布局如例7-6所示,演示如何使用FlowPane類(lèi)實(shí)現(xiàn)流式布局。首先在Chapter07程序的com.example.gui包中創(chuàng)建ExampleFlowLayout類(lèi),在該類(lèi)中使用FlowPane類(lèi)實(shí)現(xiàn)流式布局,詳見(jiàn)xampleFlowLayout.java1packagecom.example.gui;2......//省略導(dǎo)入包
3publicclassExampleFlowLayoutextendsApplication{4 @Override5 publicvoidstart(StageprimaryStage){6 FlowPaneroot=newFlowPane();//創(chuàng)建流式布局
7 //設(shè)置布局中控件的排列方向
8//root.setOrientation(Orientation.VERTICAL);//垂直排列
9 root.setOrientation(Orientation.HORIZONTAL);//水平排列
10 root.setPadding(newInsets(10));//設(shè)置內(nèi)邊距
11 root.setVgap(8);//設(shè)置子控件之間在垂直方向的間距
12 root.setHgap(8);//設(shè)置子控件之間在水平方向的間距
13 for(inti=0;i<10;i++){14 Buttonbutton=newButton("按鈕"+(i+1));15 root.getChildren().add(button);16 }17 Scenescene=newScene(root,300,150);//設(shè)置場(chǎng)景大小
18 primaryStage.setTitle("流式布局");19 primaryStage.setScene(scene);20 primaryStage.show();21 }22 publicstaticvoidmain(String[]args){23 launch(args);24 }25 }任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局流式布局上述代碼中,第13~16行代碼使用for循環(huán)向流式布局中添加10個(gè)按鈕,這些按鈕會(huì)按照它們?cè)诹魇讲季种械捻樞蛩脚帕小A魇讲季种邪粹o水平排列的運(yùn)行結(jié)果如左下圖如果想讓流式布局中的按鈕垂直排列,可以將例7-7中第8行的注釋去掉,第9行添加注釋,再次運(yùn)行程序,流式布局中按鈕垂直排列的運(yùn)行結(jié)果如右下圖任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局其他布局JavaFX中還有其他常用布局包括邊框布局、錨點(diǎn)布局、堆疊布局和分割面板布局,下面介紹這4種布局:邊框布局、錨點(diǎn)布局、堆疊布局、分割面板布局邊框布局在JavaFX中,邊框布局主要由BorderPane類(lèi)實(shí)現(xiàn),邊框布局允許將內(nèi)容添加到五個(gè)區(qū)域,分別是頂部(top)、右側(cè)(right)、底部(bottom)、左側(cè)(left)和中心(center)。任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局其他布局邊框布局邊框布局的示例代碼如下。
1//創(chuàng)建一個(gè)BorderPane2BorderPaneborderPane=newBorderPane();3borderPane.setPadding(newInsets(10,10,10,10));//設(shè)置邊距
4//創(chuàng)建并設(shè)置頂部?jī)?nèi)容
5ButtontopButton=newButton("頂部區(qū)域");6borderPane.setTop(topButton);7//創(chuàng)建并設(shè)置左側(cè)內(nèi)容
8ButtonleftButton=newButton("左側(cè)區(qū)域");9borderPane.setLeft(leftButton);10//創(chuàng)建并設(shè)置右側(cè)內(nèi)容
11ButtonrightButton=newButton("右側(cè)區(qū)域");12borderPane.setRight(rightButton);13//創(chuàng)建并設(shè)置底部?jī)?nèi)容
14ButtonbottomButton=newButton("底部區(qū)域");15borderPane.setBottom(bottomButton);16//創(chuàng)建并設(shè)置中心內(nèi)容
17StackPanecenterPane=newStackPane();18centerPane.setAlignment(Pos.CENTER);//設(shè)置內(nèi)容在StackPane中居中
19ButtoncenterButton=newButton("中心區(qū)域");20centerPane.getChildren().add(centerButton);21borderPane.setCenter(centerPane);任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局其他布局錨點(diǎn)布局錨點(diǎn)布局主要由AnchorPane類(lèi)實(shí)現(xiàn),它允許將控件錨定到布局面板的特定位置,通過(guò)設(shè)置控件與布局面板邊緣的像素距離來(lái)定位控件。假設(shè)將一個(gè)按鈕放置在AnchorPane的左下角,并且距離底部和右側(cè)各100像素,示例代碼如下1 Buttonbutton=newButton("左下角按鈕");2 AnchorPaneanchorPane=newAnchorPane();3 AnchorPane.setBottomAnchor(button,100.0);4 AnchorPane.setRightAnchor(button,100.0);5 anchorPane.getChildren().add(button);任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局其他布局堆疊布局堆疊布局主要由StackPane類(lèi)實(shí)現(xiàn),它通過(guò)將多個(gè)組件按照一定順序垂直堆疊,形成一個(gè)垂直排列的界面。堆疊布局的示例代碼如下。
1 //創(chuàng)建一個(gè)StackPane容器
2 StackPanestackPane=newStackPane();3 //創(chuàng)建3個(gè)按鈕,作為StackPane的子節(jié)點(diǎn)
4 Buttonbutton1=newButton("按鈕1");5 Buttonbutton2=newButton("按鈕2");6 Buttonbutton3=newButton("按鈕3");7 //將按鈕添加到StackPane中,后添加的按鈕會(huì)位于最前面
8 stackPane.getChildren().addAll(button1,button2,button3);任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局其他布局分割面板布局分割面板布局由SplitPane類(lèi)實(shí)現(xiàn),它是一種用戶界面設(shè)計(jì)布局,將窗口或容器區(qū)域分割成兩個(gè)或多個(gè)可調(diào)整大小的區(qū)域,以便同時(shí)顯示和管理不同的內(nèi)容或控件。這種布局方式常用于需要同時(shí)顯示和操作多個(gè)數(shù)據(jù)或視圖的情況下。假設(shè)將左側(cè)面板與右側(cè)面板通過(guò)一個(gè)分割條分割,示例代碼如下。
1 //創(chuàng)建兩個(gè)VBox作為SplitPane的初始部分
2 VBoxleftPane=newVBox(5,newButton("左側(cè)面板內(nèi)容1"),3 newButton("左側(cè)面板內(nèi)容"));4 leftPane.setPadding(newInsets(10));5 leftPane.setAlignment(Pos.TOP_LEFT);6 VBoxrightPane=newVBox(5,newButton("右側(cè)面板內(nèi)容1"),7 newButton("右側(cè)面板內(nèi)容"));8 rightPane.setPadding(newInsets(10));9 rightPane.setAlignment(Pos.TOP_LEFT);10 //創(chuàng)建一個(gè)水平的SplitPane,并添加兩個(gè)VBox11 SplitPanehorizontalSplitPane=newSplitPane();12 horizontalSplitPane.getItems().addAll(leftPane,rightPane);13 //設(shè)置分割條的位置(從左到右的比例)
14 horizontalSplitPane.setDividerPositions(0.3f);任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局其他布局如例7-7所示,演示邊框布局、錨點(diǎn)布局、堆疊布局和分割面板布局的使用。首先在Chapter07程序的com.example.gui包中創(chuàng)建ExampleOtherLayout類(lèi),在該類(lèi)中實(shí)現(xiàn)如何使用不同的布局管理器展示不同的效果,詳見(jiàn)ExampleOtherLayout.java1packagecom.example.gui;2......//省略導(dǎo)入包
3publicclassExampleOtherLayoutextendsApplication{4@Override5publicvoidstart(StageprimaryStage){6//創(chuàng)建一個(gè)BorderPane作為根布局
7BorderPanerootPane=newBorderPane();8rootPane.setPadding(newInsets(10));9//頂部:菜單條使用BorderPane的頂部區(qū)域
10MenuBarmenuBar=newMenuBar();11MenumenuFile=newMenu("文件");12MenuItemopenItem=newMenuItem("打開(kāi)");13menuFile.getItems().add(openItem);14menuBar.getMenus().add(menuFile);15rootPane.setTop(menuBar);16//左側(cè):側(cè)邊欄BorderPane的左側(cè)區(qū)域,AnchorPane來(lái)定位控件
17AnchorPanesidebar=newAnchorPane();18sidebar.setBackground(newBackground(newBackgroundFill(19Color.LIGHTGRAY,null,Insets.EMPTY)));20ButtonsidebarButton=newButton("側(cè)邊欄內(nèi)容");21AnchorPane.setTopAnchor(sidebarButton,10.0);22AnchorPane.setLeftAnchor(sidebarButton,10.0);23sidebar.getChildren().add(sidebarButton);24rootPane.setLeft(sidebar);25//右側(cè):分割面板使用SplitPane26SplitPanesplitPane=newSplitPane();27splitPane.setDividerPositions(0.3f,0.7f);//設(shè)置分割位置
28//第一個(gè)區(qū)域:使用StackPane來(lái)堆疊控件
29StackPanestackPane1=newStackPane();30Buttonbutton1=newButton("按鈕1在StackPane1中");31Buttonbutton2=newButton("按鈕2在StackPane1中");32//按鈕會(huì)堆疊在一起
33stackPane1.getChildren().addAll(button1,button2);34//第二個(gè)區(qū)域:使用另一個(gè)StackPane35StackPanestackPane2=newStackPane();36Buttonbutton3=newButton("按鈕3在StackPane2中");37Buttonbutton4=newButton("按鈕4在StackPane2中");38//按鈕會(huì)堆疊在一起
39stackPane2.getChildren().addAll(button3,button4);40//添加兩個(gè)StackPane到SplitPane41splitPane.getItems().addAll(stackPane1,stackPane2);42rootPane.setCenter(splitPane);43//創(chuàng)建一個(gè)場(chǎng)景并設(shè)置給舞臺(tái)
44Scenescene=newScene(rootPane,800,600);45//設(shè)置舞臺(tái)的標(biāo)題并顯示舞臺(tái)
46primaryStage.setTitle("其他布局");47primaryStage.setScene(scene);48primaryStage.show();49}50 publicstaticvoidmain(String[]args){51 launch(args);52 }53}任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX常用布局其他布局其他布局的運(yùn)行結(jié)果如圖任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX事件處理事件處理機(jī)制JavaFX中的事件處理專門(mén)用于響應(yīng)用戶的操作,例如,響應(yīng)用戶的單擊鼠標(biāo)、按下鍵盤(pán)等操作。在JavaFX事件處理的過(guò)程中,主要涉及到三個(gè)對(duì)象,分別是事件源(EventSource)、事件對(duì)象(Event)和監(jiān)聽(tīng)器(Listener),具體介紹如下。事件源:事件發(fā)生的場(chǎng)所,通常是產(chǎn)生事件的組件,例如窗口、按鈕、菜單等。事件對(duì)象:封裝了GUI組件上發(fā)生的特定事件(通常是用戶的一次操作)。監(jiān)聽(tīng)器:負(fù)責(zé)監(jiān)聽(tīng)事件源上發(fā)生的事件,并對(duì)各種事件做出相應(yīng)處理的對(duì)象(對(duì)象中包含事件處理器)。任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX事件處理事件處理機(jī)制事件源、事件對(duì)象和監(jiān)聽(tīng)器在整個(gè)事件處理過(guò)程中都起著非常重要的作用,它們彼此之間有著非常緊密的聯(lián)系。下面用一個(gè)圖例來(lái)描述事件處理的工作流程,如圖任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX事件處理動(dòng)作事件處理ActionEvent表示某種動(dòng)作的事件,如按鈕被單擊、菜單項(xiàng)被選擇等都會(huì)發(fā)生對(duì)應(yīng)的動(dòng)作事件。動(dòng)作事件的處理包括兩部分內(nèi)容,分別是注冊(cè)事件處理器和實(shí)現(xiàn)事件處理,其中,注冊(cè)事件處理器的方法有2個(gè),分別是使用控件調(diào)用的setOnAction()方法和Node類(lèi)定義的addEventHandler()方法,這兩個(gè)方法的語(yǔ)法格式如下所示。setOnAction(EventHandler<ActionEvent>handler)addEventHandler(ActionEventeventType,EventHandler<ActionEvent>handler)上述語(yǔ)法格式中的參數(shù)handler是事件處理器對(duì)象,eventType是事件類(lèi)型。當(dāng)處理ActionEvent事件時(shí),可以使用常見(jiàn)的三種方式來(lái)實(shí)現(xiàn),分別是通過(guò)內(nèi)部類(lèi)實(shí)現(xiàn)、匿名內(nèi)部類(lèi)實(shí)現(xiàn)和Lambda表達(dá)式實(shí)現(xiàn)任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX事件處理動(dòng)作事件處理通過(guò)內(nèi)部類(lèi)實(shí)現(xiàn)動(dòng)作事件假設(shè)使用內(nèi)部類(lèi)實(shí)現(xiàn)ok按鈕與cancel按鈕的單擊事件,示例代碼如下//使用兩種方式分別注冊(cè)ok按鈕和cancel按鈕的事件處理器ok.setOnAction(newButtonHandler());cancel.addEventHandler(ActionEvent.ACTION,newButtonHandler());//內(nèi)部類(lèi)實(shí)現(xiàn)事件處理classButtonHandlerimplementsEventHandler<ActionEvent>{ publicvoidhandle(ActionEventevent){ if((Button)(event.getSource())==ok){ //處理ok按鈕的單擊事件的代碼
}elseif(event.getSource()==cancel){ //處理cancel按鈕的單擊事件的代碼
} }}任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX事件處理動(dòng)作事件處理通過(guò)匿名內(nèi)部類(lèi)實(shí)現(xiàn)動(dòng)作事件假設(shè)使用匿名內(nèi)部類(lèi)實(shí)現(xiàn)button按鈕的單擊事件,示例代碼如下。button.setOnAction(newEventHandler<ActionEvent>(){@Overridepublicvoidhandle(ActionEventevent){//處理動(dòng)作事件的代碼
}});任務(wù)7-2模擬購(gòu)物結(jié)賬功能-JavaFX事件處理動(dòng)作事件處理通過(guò)Lambda表達(dá)式實(shí)現(xiàn)動(dòng)作事件假設(shè)使用Lambda表達(dá)式實(shí)現(xiàn)button按鈕的單擊事件,示例代碼如下。button.setOnAction(event->{ //處理動(dòng)作事件的代碼});1.在Chapter07程序的com.example.task包中創(chuàng)建一個(gè)水果實(shí)體類(lèi)Fruit,用于封裝購(gòu)買(mǎi)的水果信息,這些信息包括水果名稱、圖片路徑和水果價(jià)格。2.在com.example.task包中創(chuàng)建CheckOutApp類(lèi)繼承Application類(lèi),用于實(shí)現(xiàn)購(gòu)物結(jié)賬功能。3.在CheckOutApp類(lèi)中創(chuàng)建createFruitBox()方法,在該方法中創(chuàng)建一個(gè)包含水果圖片、名稱和價(jià)格的VBox(垂直布局)。4.在CheckOutApp類(lèi)中創(chuàng)建createCheckoutBox()方法,在該方法中創(chuàng)建一個(gè)包含“結(jié)賬”按鈕與總價(jià)信息的VBox。5.在CheckOutApp類(lèi)中創(chuàng)建start()方法,在該方法中將放置好水果信息的垂直布局與放置好結(jié)賬信息的垂直布局放在一個(gè)水平布局中,并將水平布局加載到根布局中。6.在main()方法中調(diào)用launch()方法啟動(dòng)程序。代碼參考教材中的Fruit.javaCheckOutApp.java任務(wù)7-2模擬購(gòu)物結(jié)賬功能-任務(wù)實(shí)現(xiàn)上述代碼中的Label、Button和ImageView控件會(huì)在任務(wù)7-3中詳細(xì)講解,此處只做簡(jiǎn)單的使用。運(yùn)行CheckOutApp類(lèi),程序會(huì)彈出一個(gè)購(gòu)物結(jié)賬窗口,如圖任務(wù)7-2模擬購(gòu)物結(jié)賬功能-任務(wù)實(shí)現(xiàn)單擊“結(jié)賬”按鈕,程序會(huì)將已購(gòu)買(mǎi)的蘋(píng)果和香蕉的價(jià)格加起來(lái)作為總價(jià)顯示在“結(jié)賬”按鈕下方,如圖03任務(wù)7-3購(gòu)物滿意度問(wèn)卷調(diào)查ImageView控件Label控件Button控件CheckBox控件RadioButton控件文本輸入控件列表控件菜單控件任務(wù)7-3購(gòu)物滿意度問(wèn)卷調(diào)查-JavaFX基礎(chǔ)控件ImageView控件ImageView控件用于顯示圖像,支持圖像的縮放、旋轉(zhuǎn)等變換ImageView控件的常用方法方法名稱說(shuō)明ImageView()創(chuàng)建一個(gè)ImageView對(duì)象,不與任何圖像關(guān)聯(lián)ImageView(Imageimage)使用指定的圖像創(chuàng)建一個(gè)ImageView對(duì)象ImageView(StringfileURL)使用指定的文件或URL加載圖像創(chuàng)建一個(gè)ImageView對(duì)象setFitHeight(doublevalue)設(shè)置圖像高度setFitWidth(doublevalue)設(shè)置圖像寬度setRotate(doublevalue)設(shè)置圖像的旋轉(zhuǎn)角度,以度為單位。value的值為正值表示順時(shí)針旋轉(zhuǎn),為負(fù)值表示逆時(shí)針旋轉(zhuǎn)setPreserveRatio(booleanvalue)指定圖像是否保持其原始縱橫比。默認(rèn)情況下,value值為true,表示圖像在縮放時(shí)將保持其原始比例,否則,圖像在縮放時(shí)失去其原始比例setViewport(Rectangle2Dvalue)用于定義圖像的可見(jiàn)區(qū)域(視口),通過(guò)調(diào)整視口的位置和大小,可以實(shí)現(xiàn)圖像的滾動(dòng)和裁剪效果setOpacity(doublevalue)設(shè)置圖像的透明度,value是一個(gè)介于0.0(完全透明)和1.0(完全不透明)之間的雙精度浮點(diǎn)數(shù)任務(wù)7-3購(gòu)物滿意度問(wèn)卷調(diào)查-JavaFX基礎(chǔ)控件ImageView控件如例7-8所示,演示ImageView控件的使用,首先在Chapter07程序中創(chuàng)建resources文件夾,該文件夾用于存放資源文件,將需要顯示在ImageView控件上的圖片hamster.png導(dǎo)入到resources文件夾中。然后在程序的com.example.gui包中創(chuàng)建ExampleImageView類(lèi),在該類(lèi)中設(shè)置ImageView控件的樣式,詳見(jiàn)ExampleImageView.java……try{8//加載小倉(cāng)鼠圖像
9input1=newFileInputStream("resources/hamster.png");10input2=newFileInputStream("resources/hamster.png");11input3=newFileInputStream("resources/hamster.png");12Imageimage1=newImage(input1);13Imageimage2=newImage(input2);14Imageimage3=newImage(input3);15//第一個(gè)ImageView:顯示原圖,寬和高分別是200像素
16ImageViewimageView1=newImageView(image1);17imageView1.setFitHeight(200);//容器高度為20018imageView1.setFitWidth(200);//容器寬度為20019//第二個(gè)ImageView:半透明并調(diào)整視口
20ImageViewimageView2=newImageView(image2);21imageView2.setOpacity(0.5);//半透明
22//調(diào)整視口到(50,50)開(kāi)始,寬度和高度都為10023imageView2.setViewport(newjavafx.geometry.Rectangle2D(240,100));25//第三個(gè)ImageView:自定義尺寸并旋轉(zhuǎn)
26ImageViewimageView3=newImageView(image3);27imageView3.setFitHeight(150);//自定義高度
28imageView3.setFitWidth(150);//自定義寬度
29imageView3.setRotate(30);//旋轉(zhuǎn)30度
30//垂直布局
31VBoxvbox=newVBox(10);32vbox.getChildren().addAll(imageView1,imageView2,imageView3);33vbox.setAlignment(Pos.CENTER);34vbox.setPadding(newInsets(10));……任務(wù)7-3購(gòu)物滿意度問(wèn)卷調(diào)查-JavaFX基礎(chǔ)控件Label控件Label控件用于顯示不可編輯的文本和圖片,它可以設(shè)置文本的字體、顏色、對(duì)齊方式、下劃線、刪除線等。Label控件的常用方法方法名稱說(shuō)明Label()創(chuàng)建一個(gè)空標(biāo)簽Label(Stringtext)使用指定文本創(chuàng)建一個(gè)標(biāo)簽Label(Stringtext,Nodegraphic)使用指定文本和圖形創(chuàng)建一個(gè)標(biāo)簽,graphic可以是一個(gè)形狀、圖像或其他控件setGraphic(Nodevalue)設(shè)置標(biāo)簽的圖形,該圖形可以是圖片或形狀setAlignment(Posvalue)設(shè)置標(biāo)簽中文本和圖形的對(duì)齊方式,對(duì)齊方式使用Pos枚舉常量指定,例如Pos.CENTER表示居中對(duì)齊setContentDisplay(ContentDisplayvalue)設(shè)置標(biāo)簽中文本與圖形內(nèi)容的顯示方式,顯示方式用枚舉常量ContentDisplay指定,例如ContentDisplay.LEFT表示文本或圖形在標(biāo)簽的左側(cè)顯示setText(Stringvalue)設(shè)置標(biāo)簽中的文本setFont(Fontfont)設(shè)置標(biāo)簽中文本的字體setTextFill(Paintvalue)設(shè)置文本顏色setUnderline(booleanvalue)設(shè)置文本是否加下畫(huà)線setWrapText(booleanvalue)設(shè)置如果文本超過(guò)了寬度,是否要換行任務(wù)7-3購(gòu)物滿意度問(wèn)卷調(diào)查-JavaFX基礎(chǔ)控件Label控件如例7-9所示,演示Label控件的使用,首先將需要顯示在Label控件上的圖片clock.png導(dǎo)入到程序Chapter07的resources文件夾中。然后在程序的com.example.gui包中創(chuàng)建ExampleLabel類(lèi),在該類(lèi)中設(shè)置Label控件的樣式,具體代碼詳見(jiàn)ExampleLabel.java……8 try{9 //加載咖啡的圖像
10 input=newFileInputStream("resources/coffee.png");11 Imageimage=newImage(input);12 coffee=newImageView(image);13 coffee.setFitHeight(54);14 coffee.setFitWidth(64);15 }catch(FileNotFoundExceptione){16 e.printStackTrace();17 }18//創(chuàng)建一個(gè)按鈕,并設(shè)置按鈕的圖形和內(nèi)容
19ButtonbrewButton=newButton("沖泡咖啡",coffee);20//為按鈕添加單擊事件處理器
21brewButton.setOnAction(event->{22//模擬咖啡機(jī)沖泡咖啡的過(guò)程
23System.out.println("咖啡機(jī)開(kāi)始沖泡咖啡...");24try{25Thread.sleep(2000);//模擬2秒的沖泡時(shí)間
26}catch(InterruptedExceptione){27e.printStackTrace();28}29System.out.println("咖啡已沖泡完成!");30});31//創(chuàng)建布局容器和場(chǎng)景
32StackPaneroot=newStackPane();//使用StackPane作為根容器
33root.setAlignment(Pos.CENTER);//布局居中
34root.getChildren().add(brewButton);//添加按鈕到容器中
35Scenescene=newScene(root,300,200);//創(chuàng)建一個(gè)場(chǎng)景并設(shè)置大小
36scene.setFill(Color.WHITE);//設(shè)置場(chǎng)景背景色為白色
37//設(shè)置主舞臺(tái)的場(chǎng)景并顯示
38primaryStage.setScene(scene);39primaryStage.setTitle("按鈕示例");40primaryStage.show();41}……任務(wù)7-3購(gòu)物滿意度問(wèn)卷調(diào)查-JavaFX基礎(chǔ)控件Button控件Button控件用于顯示按鈕,是JavaFX中的一個(gè)基本控件,既可以顯示文本,又可以顯示圖形,同時(shí)也允許用戶通過(guò)單擊來(lái)觸發(fā)某個(gè)動(dòng)作或事件Button控件的常用方法方法名稱說(shuō)明Button()創(chuàng)建一個(gè)沒(méi)有文本信息的按鈕Button(Stringtext)創(chuàng)建帶指
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)滌棉嗶嘰布數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年高中化學(xué)疑難問(wèn)題解答匯編36例
- 部編版五年級(jí)下冊(cè)語(yǔ)文期末背誦與理解復(fù)習(xí)資料(有答案)
- 北師大版(2019)必修第一冊(cè)Unit 1 Life Choices Topic Talk 知識(shí)點(diǎn) 講義
- 專業(yè)燈光設(shè)計(jì)合同
- 共享工作人員協(xié)議
- 家禽養(yǎng)殖場(chǎng)租賃合同
- 歷史朝代更迭與文明發(fā)展:歷史知識(shí)體系梳理教案
- 合營(yíng)企業(yè)內(nèi)部股權(quán)轉(zhuǎn)讓協(xié)議書(shū)
- 水坑施工方案
- 上海市農(nóng)村房地一體宅基地確權(quán)登記工作實(shí)施方案
- 計(jì)算機(jī)網(wǎng)絡(luò)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋貴州財(cái)經(jīng)大學(xué)
- 酒店2025年應(yīng)急疏散演練計(jì)劃
- 2025年湖南司法警官職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)必考題
- 數(shù)學(xué)-廣東省2025年深圳市高三年級(jí)第一次調(diào)研考試(深圳一模)試題和答案
- 第一單元第2課《生活之美》課件-七年級(jí)美術(shù)下冊(cè)(人教版)
- 2025年高考作文備考之題目解析及4篇范文:“生活是否還需要游戲”
- 2025年中國(guó)秸稈發(fā)電行業(yè)市場(chǎng)前瞻與投資預(yù)測(cè)分析報(bào)告
- 2025年七下道德與法治教材習(xí)題答案
- 全國(guó)第三屆職業(yè)技能大賽(無(wú)人機(jī)駕駛(植保)項(xiàng)目)選拔賽理論考試題庫(kù)(含答案)
- 汽車(chē)倒車(chē)防撞報(bào)警器的設(shè)計(jì)--本科畢業(yè)設(shè)計(jì)(論文)
評(píng)論
0/150
提交評(píng)論