Java語言程序設(shè)計 課件 第15章 JavaFX基礎(chǔ)_第1頁
Java語言程序設(shè)計 課件 第15章 JavaFX基礎(chǔ)_第2頁
Java語言程序設(shè)計 課件 第15章 JavaFX基礎(chǔ)_第3頁
Java語言程序設(shè)計 課件 第15章 JavaFX基礎(chǔ)_第4頁
Java語言程序設(shè)計 課件 第15章 JavaFX基礎(chǔ)_第5頁
已閱讀5頁,還剩101頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Java語言程序設(shè)計第15章JavaFX基礎(chǔ)

1JavaFX概述23主要內(nèi)容Java語言程序設(shè)計(第4版)清華大學(xué)出版社2022JavaFX程序基本結(jié)構(gòu)JavaFX屬性與綁定45JavaFX界面布局Color類和Font類6JavaFX形狀7Image和ImageView類89特效實現(xiàn)案例:考試成績分布圖Java語言程序設(shè)計15.1JavaFX概述Java語言支持圖形界面程序開發(fā)。歷史上,Java出現(xiàn)過三種圖形界面開發(fā)技術(shù),從最初的AWT,到Java2的Swing,再到現(xiàn)在的JavaFX。盡管Java最新版本仍然支持Swing,但Oracle決定不再繼續(xù)研發(fā)Swing。要用Java開發(fā)圖形界面程序,應(yīng)該使用JavaFX。概述JavaFX是Java的下一代圖形用戶界面開發(fā)工具,它使開發(fā)人員能夠快速構(gòu)建跨平臺的富Internet應(yīng)用程序。JavaFX使得開發(fā)員將圖形、動畫和UI控件完美結(jié)合。JavaFX主要目的是用于多種類型設(shè)備,如桌面電腦、平板電腦、嵌入設(shè)備、智能電話、電視等。Java從1.0就提供一個AWT類庫,稱為抽象窗口工具箱(AbstractWindowToolkit,AWT)。Java從1.2出現(xiàn)了Swing,它也沒有實現(xiàn)盡善盡美。Oracle宣布不再繼續(xù)開發(fā)Swing。15.1.1JavaGUI編程簡史2011年,Oracle收購Sun后發(fā)布了一個新版本JavaFX2.0,它使用純JavaAPI編寫GUI程序,不需要使用另一門語言。從Java11開始,JavaFX已經(jīng)不與JDK綁定到一起,要使用JavaFX必須單獨下載,最新版本是JavaFX17。進入https://openjfx.io/站點,下載與操作系統(tǒng)匹配的JavaFXSDK軟件,目前的最新版本是JavaFX17。設(shè)下載文件為openjfx-_windows-x64_bin-sdk.zip,將其解壓到一個目錄,比如,D:\javafx-sdk-。其中的lib目錄包含JavaFX的模塊文件。15.1.2添加JavaFX軟件包在Eclipse中使用JavaFX,需要做下面的配置。(1)在Eclipse中創(chuàng)建用戶庫(UserLibrary)。選擇Window→Preferences→Java→BuildPath→UserLibraries,單擊New按鈕,在打開的對話框輸入用戶庫名javafx17,然后,單擊AddExternalJARs并包含JavaFX17的lib目錄中所有jar文件。(2)創(chuàng)建Java項目并添加用戶庫。在Eclipse中可以創(chuàng)建非模塊項目。右擊項目,選擇BuildPath→AddLibraries添加用戶庫javafx17。15.1.2添加JavaFX軟件包JavaFX框架API定義了30多個包,這些包以javafx開頭,如javafx.application包、javafx.stage包、javafx.scene包、javafx.scene.layout包等。JavaFX應(yīng)用程序的功能通過這些包中的接口和類實現(xiàn)。在JavaFX17中這些庫文件被打包在多個模塊文件中,比如javafx.base.jar、javafx.controls.jar等文件中。JavaFX的圖形用戶界面通常稱為場景圖(scenegraph)。場景圖是構(gòu)建JavaFX應(yīng)用程序的起點。JavaFX場景圖除包括各種布局面板、UI控件、圖像、媒體和圖表等,還可包括基本形狀,如直線、圓、矩形、文本等。15.1.3JavaFX主要功能在JavaFX場景圖中通過對節(jié)點渲染,來增強界面視覺效果。比如可以使用各種特效,其中包括陰影、倒影、發(fā)光、模糊等。JavaFX場景圖中的每個節(jié)點都可以使用javafx.scene.tranform包中的類進行變換,包括位置移動、縮放、旋轉(zhuǎn)等。JavaFX媒體功能通過javafx.scene.media包的API實現(xiàn),JavaFX支持兩種視聽媒體。它支持MP3、AIFF和WAV音頻文件和FLV視頻文件。15.1.3JavaFX主要功能JavaFX級聯(lián)樣式單(CascadingStyleSheets,CSS)可以在不改變源代碼的情況下為JavaFX應(yīng)用程序的用戶界面提供自定義的樣式。JavaFX提供了一個嵌入瀏覽器組件。Java語言程序設(shè)計15.2JavaFX程序基本結(jié)構(gòu)每個JavaFX程序都必須繼承javafx.application.Application類,Application類定義了應(yīng)用程序生命周期方法:初始化(init)開始(start)停止(stop)啟動(launch)下面程序覆蓋了start()方法并在main()方法中啟動程序。JavaFX程序基本結(jié)構(gòu)@Override

publicvoidstart(Stagestage){Labellabel=newLabel("第一個JavaFX程序");StackPanerootNode=newStackPane();//創(chuàng)建面板作為根節(jié)點rootNode.getChildren().add(label);//將標簽添加到根節(jié)點上

//創(chuàng)建場景對象,指定根節(jié)點對象和大小Scenescene=newScene(rootNode,200,60);stage.setTitle("JavaFX程序");stage.setScene(scene);//將場景設(shè)置到舞臺中stage.show();//顯示舞臺窗口

}程序15.1HelloWorld.java

publicstaticvoidmain(String[]args){

//啟動JavaFX應(yīng)用程序Application.launch(args);

}可以從IDE(如Eclipse)中或命令行測試和運行JavaFX程序。在Eclipse運行JavaFX程序需要指定VM參數(shù)(虛擬機參數(shù))。選擇Run→Configuration,在打開對話框左側(cè)選擇要執(zhí)行的類,在右側(cè)窗口選擇Arguments選項卡,在VMarguments框中輸入下面參數(shù):JavaFX程序基本結(jié)構(gòu)--module-path"D:\javafx-sdk-\lib"--add-modules=javafx.controls,javafx.fxml這里,選項“--module-path”指定運行程序所需模塊路徑,“--add-modules”選項指定使用的具體模塊,有的程序可能需要多個模塊。JavaFX程序通過舞臺(stage)和場景(scene)定義用戶界面。Stage舞臺對象是JavaFX的頂層容器,它構(gòu)成應(yīng)用程序的主窗口。Scene表示舞臺中一個場景,它是一個容器,可包含各種控件,如布局面板,按鈕、復(fù)選框、文本和圖形等??梢詫⑦@些元素添加到場景中。15.2.1舞臺和場景任何JavaFX程序至少有一個舞臺和一個場景。每個JavaFX應(yīng)用都可自動訪問一個Stage,它稱為主舞臺。主舞臺是JavaFX應(yīng)用啟動時由運行時系統(tǒng)創(chuàng)建的,通過start()方法的參數(shù)獲得,用戶不能自己創(chuàng)建。下面代碼創(chuàng)建一個寬300像素,高200像素的場景對象,根節(jié)點是rootPane,背景顏色為淺灰色。

varscene=newScene(rootPane,300,200,Color.LIGHTGRAY);15.2.1舞臺和場景publicScene(Parentroot):使用指定的根節(jié)點創(chuàng)建一個場景對象。publicScene(Parent

root,double

width,double

height):創(chuàng)建一個場景對象,width和height參數(shù)分別指定場景的寬度和高度。publicScene(Parent

root,double

width,double

height,Paint

fill):創(chuàng)建一個場景對象,fill指定場景的背景填充顏色。舞臺、場景、面板及控件的關(guān)系如圖15-2所示。節(jié)點控件添加到面板中,面板作為場景的根節(jié)點,場景設(shè)置到舞臺中。15.2.1舞臺和場景場景中的元素稱為節(jié)點(node),每個節(jié)點表示用戶界面的可視元素。例如,按鈕是一個節(jié)點。節(jié)點也可以由一組其他節(jié)點組成,節(jié)點可以有子節(jié)點。有子節(jié)點的節(jié)點稱為父節(jié)點或分支節(jié)點,無子節(jié)點的節(jié)點稱為葉節(jié)點。15.2.2場景圖和節(jié)點場景圖中的所有節(jié)點構(gòu)成一個樹型結(jié)構(gòu)。在場景圖中只能有一個根節(jié)點,它不能有父節(jié)點,除根節(jié)點外,其他節(jié)點都可以有父節(jié)點。根節(jié)點通常是一個面板(Pane),它管理場景中節(jié)點對象擺放。例如,F(xiàn)lowPane提供了流式布局,GridPane支持行列的網(wǎng)格式布局,它們也都是Node的子類。Node是所有節(jié)點的根類,該類的子類包括Parent、Group、Region和Control等。Node類的常用子類層次結(jié)構(gòu)如圖15-3所示。15.2.2場景圖和節(jié)點節(jié)點是可視化組件,比如,一個形狀、一個圖像視圖、一個UI組件或者一個面板。形狀是指文字、直線、圓、橢圓、矩形、弧、多邊形、折線等。UI組件是指標簽、按鈕、復(fù)選框、文本框、單選按鈕等。一個場景可以顯示在一個舞臺中。15.2.2場景圖和節(jié)點JavaFX程序必須繼承javafx.application.Application抽象類。Application類定義了三個生命周期方法,包括init()、start()和stop()方法,在JavaFX程序中可以覆蓋這些方法。publicvoidinit()publicabstractvoidstart(Stagestage)publicvoidstop()15.2.3Application類生命周期方法start()方法在init()之后調(diào)用,開始執(zhí)行程序,它可構(gòu)建和設(shè)置場景。注意,運行時系統(tǒng)為該方法傳遞一個Stage引用,它是主舞臺對象。該方法是抽象的,必須覆蓋它。要運行JavaFX應(yīng)用程序可以從main()方法中調(diào)用Application類的靜態(tài)方法launch(),該方法啟動一個獨立的JavaFX程序。該方法啟動后將調(diào)用init()方法和start()方法,當(dāng)應(yīng)用程序終止時,launch()方法才返回。下面是該方法的典型用法。15.2.4JavaFX程序啟動publicstaticvoidmain(String[]args){Application.launch(args);}launch()方法的另一種使用格式如下:publicstatic

void

launch(Class<?extendsApplication>

appClass,String...

args)參數(shù)appClass指定要啟動運行的應(yīng)用程序類,下面是典型用法:15.2.4JavaFX程序啟動publicstaticvoidmain(String[]args){Application.launch(MyApp.class,args);}Java語言程序設(shè)計15.3JavaFX屬性與綁定在Java中類的屬性通常對應(yīng)一個可以讀寫的字段,并為屬性提供訪問方法(getter)和修改方法(setter),它們讀取和設(shè)置字段值。下面User類就是一個簡單的JavaBeans。publicclassUser{privateStringusername;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}}概述在JavaFX中,節(jié)點類通常包含一些屬性,這些屬性與普通Java類的屬性不同。15.3.1JavaFX屬性首先,屬性的類型應(yīng)為Property接口的子類型,如StringProperty為字符串類型屬性,IntegerProperty為整型類型屬性。其次,一個屬性除setter和getter方法外,還應(yīng)有第三個方法,它返回一個實現(xiàn)Property接口的對象。上述的User類如果用JavaFX屬性定義,如下所示。publicclassUser{//定義一個綁定屬性privateStringPropertyusername=newSimpleStringProperty();publicfinalStringgetUsername(){returnusername.get();}publicfinalvoidsetUsername(StringnewValue){username.set(newValue);}publicfinalStringPropertyusernameProperty(){returnusername;}}JavaFX屬性的主要功能是屬性綁定和事件處理。通過屬性的addListener()方法可以為其注冊監(jiān)聽器。通過屬性的bind()方法可以實現(xiàn)屬性綁定。當(dāng)被綁定的對象屬性發(fā)生改變時,將自動反映到綁定的對象上。15.3.1JavaFX屬性下面看一下如何實現(xiàn)屬性綁定。下面程序在一個面板顯示一個圓。@Overridepublicvoidstart(Stagestage){varrootPane=newPane();varcircle=newCircle(45,45,40,Color.WHITE);circle.setStroke(Color.BLUE);//設(shè)置筆劃顏色為藍色

rootPane.getChildren().add(circle);//將圓添加到根面板中varscene=newScene(rootPane,100,100);stage.setTitle("顯示圓對象");//設(shè)置舞臺標題stage.setScene(scene);//設(shè)置主舞臺的場景stage.show();//顯示主舞臺程序15.2ShowCircle.java屬性綁定是JavaFX引入的一個新概念。可以將一個目標對象和一個源對象綁定。如果源對象的屬性值改變了,目標對象的屬性值隨之自動改變。一個目標target使用bind()方法和源source進行綁定,如下所示。target.bind(source);15.3.2屬性綁定對上一小節(jié)的例子,為實現(xiàn)窗體大小改變保證圓仍然顯示在中央,可以將圓心坐標屬性centerX和centerY屬性分別綁定到面板的width/2以及height/2上。使用下面代碼實現(xiàn)屬性綁定。circle.centerXProperty().bind(rootPane.widthProperty().divide(2));circle.centerYProperty().bind(rootPane.heightProperty().divide(2));15.3.2屬性綁定Circle類具有centerX和centerY屬性,用于表示圓心的x和y坐標。與許多JavaFX類的屬性一樣,在屬性綁定中,該屬性既可以作為目標,也可以作為源。目標監(jiān)聽源中屬性值的變化,一旦源發(fā)生變化,目標將自動更新。上面展示的綁定稱為單向綁定。在JavaFX中如果目標和源都是綁定屬性或可觀察屬性,還可以進行屬性的雙向綁定,它是使用bindBidirectional()方法實現(xiàn)的。屬性雙向綁定后,不管二者哪一方發(fā)生改變,另一方都會被相應(yīng)地更新。15.3.2屬性綁定Java語言程序設(shè)計15.4JavaFX界面布局JavaFX界面不但可以添加文本和各種形狀,還可以添加各種控件,這些控件在窗口中通過布局面板控制。JavaFX提供了多種布局面板,如邊界面板、網(wǎng)格面板等。這些面板具有不同的特點,用戶在構(gòu)建復(fù)雜界面時,應(yīng)靈活選擇這些面板。這些面板都可以作為根面板使用,也可作為其他面板的子節(jié)點使用。表15-1給出了JavaFX應(yīng)用中常用的面板類。概述面板類說明Pane所有面板類的根類。該類主要用于需要對控件或形狀絕對定位的情況HBox水平排列控件的控件框VBox垂直排列控件的控件框BorderPane邊界面板。提供Top、Bottom、Left、Right、Center五個區(qū)域放置控件或其他面板,類似于Swing的BorderLayoutFlowPane流式面板。按照行流式放置子控件,當(dāng)空間不足時另起一行,類似于Swing中的FlowLayoutGridPane以表格形式排列子控件,類似于Swing的GridBagLayoutStackPane將子控件重疊排列??梢杂脕硌b飾其他控件。例如將一個按鈕放在一個彩色方塊上TextFlow一種特殊的布局面板,可將多個文本節(jié)點以流的方式布局JavaFX常用面板屏幕和面板等組件坐標與數(shù)學(xué)的笛卡爾坐標不同,它的原點在屏幕或面板的左上角,橫向為x軸,縱向為y軸。坐標單位是像素。如圖15-6所示。在場景圖中添加形狀有時需要指定形狀的位置,它是通過坐標指定的。如直線通過兩個端點的坐標確定,橢圓通過圓心坐標、x軸半徑和y軸半徑確定。15.4.1JavaFX坐標系Pane是所有其他面板類的基類,它主要用于需要對控件絕對定位的情況。當(dāng)面板大小改變時,添加在其中的形狀和控件絕對位置不變??梢允褂盟臉?gòu)造方法創(chuàng)建Pane對象。15.4.2Pane面板publicPane():創(chuàng)建空面板對象,之后可向其中添加形狀和控件。publicPane(Node…children):創(chuàng)建面板對象,并將參數(shù)指定的節(jié)點添加到面板中。Pane類除繼承父類中的方法外定義了getChildren()方法,它返回添加到面板上子節(jié)點的一個列表,格式如下。

public

ObservableList<Node>

getChildren()返回值是一個ObservableList對象,調(diào)用它的add(node)方法可將一個節(jié)點添加到面板中,調(diào)用它的addAll(node1,node2,…)方法可將多個節(jié)點添加到面板中。下面程序演示了Pane面板的使用。15.4.2Pane面板@Override

publicvoidstart(Stagestage){PanerootNode=newPane();//rootNode.setPrefSize(300,200);Circlecircle=newCircle(25,Color.BLUE);circle.setCenterX(100);circle.setCenterY(50);Rectanglerectangle=newRectangle(100,30,Color.RED);rectangle.relocate(100,50);rectangle.setRotate(-33);//將矩形沿逆時針旋轉(zhuǎn)33度程序15.3PaneDemo.javarootNode.getChildren().addAll(circle,rectangle);Scenescene=newScene(rootNode,300,120);stage.setTitle("Pane面板示例");stage.setScene(scene);stage.show();

}

publicstaticvoidmain(String[]args){

launch(args);

}HBox面板實現(xiàn)一種水平(horizontal)排列的控件框,在HBox上可以添加多個控件,它們水平擺放。構(gòu)造方法:

HBox(double

spacing)

HBox(Node...

children)15.4.3HBox面板HBox類定義了和從父類繼承了許多屬性和方法,下面是幾個常用的方法15.4.3HBox面板publicvoidsetPading(Insetsvalue):設(shè)置水平框中內(nèi)容與邊界之間的距離。參數(shù)Insets分別指定上、右、下、左間距,默認值是Insets.EMPTY。publicvoidsetSpacing(double

value):設(shè)置水平框中控件之間的間距。publicvoidsetStyle(Stringvalue):設(shè)置水平框的用字符串表示的樣式,它類似于HTML元素的style屬性。@Override

publicvoidstart(Stagestage){

varhbox=newHBox();hbox.setPadding(newInsets(15,12,15,12));hbox.setSpacing(10);hbox.setStyle("-fx-background-color:#336699;");

varbutton1=newButton("確定");

varbutton2=newButton("取消");button1.setPrefSize(200,20);button2.setPrefSize(100,20);程序15.4HBoxDemo.javahbox.getChildren().addAll(button1,button2);

varscene=newScene(hbox,300,50);stage.setTitle("HBox示例");stage.setScene(scene);stage.show();

}

publicstaticvoidmain(String[]args){

launch(args);

}VBox實現(xiàn)一種垂直(vertical)排列的控件框,在VBox上可以添加多個控件,它們垂直擺放。VBox類定義了與HBox類似的構(gòu)造方法、屬性和各種實例方法。下面代碼創(chuàng)建一個VBox對象并向其中添加4個按鈕。15.4.4VBox面板varvbox=newVBox(10);vbox.setPadding(newInsets(15,12,15,12));varred=newButton("紅色");vargreen=newButton("綠色");varblue=newButton("藍色");varyellow=newButton("黃色");blue.setPrefSize(100,20);//設(shè)置按鈕的優(yōu)先大小vbox.getChildren().addAll(red,green,blue,yellow);//vbox.setAlignment(Pos.CENTER);設(shè)置控件框居中對齊BorderPane將面板分成上(Top)、下(Bottom)、左(Left)、右(Right)和中央(Center)五個區(qū)域,在每個區(qū)域可以放置一個控件或其他面板。每個區(qū)域大小都是任意的,如果應(yīng)用程序不需要某個區(qū)域,可以不定義,也不留出空間。15.4.5BorderPane面板BorderPane類的常用構(gòu)造方法如下。publicBorderPane()。publicBorderPane(Nodecenter):將指定的節(jié)點作為中央?yún)^(qū)域控件。publicBorderPane(Nodecenter,Nodetop,Noderight,Nodebottom,Nodeleft):創(chuàng)建一個邊界式面板對象,并指定每個區(qū)域的節(jié)點。創(chuàng)建BorderPane后,還可使用它的setTop()、setLeft()、setRight()、setBottom()和setCenter()等方法設(shè)置各個位置的控件。下面代碼使用BorderPane面板,并在其中添加5個按鈕,這些按鈕的大小不同。15.4.5BorderPane面板varrootPane=newBorderPane();rootPane.setTop(newButton("上部工具條"));rootPane.setLeft(newButton("左部菜單"));rootPane.setCenter(newButton("中央?yún)^(qū)域"));rootPane.setRight(newButton("右部"));rootPane.setBottom(newButton("下部狀態(tài)欄"));varscene=newScene(rootPane,300,150);stage.setScene(scene);stage.setTitle("邊界面板示例");stage.show();FlowPane流式面板中節(jié)點按行(或列)擺放,當(dāng)一行(或一列)不能容納所有控件時,自動轉(zhuǎn)到下一行(或下一列)。15.4.6FlowPane面板構(gòu)造方法:

FlowPane(doublehgap,doublevgap)FlowPane(doublehgap,doublevgap,Node…children)FlowPane(Orientationorientation)FlowPanerootNode=newFlowPane();rootNode.setOrientation(Orientation.VERTICAL);rootNode.setPadding(newInsets(15,10,15,10));rootNode.setVgap(10);rootNode.setHgap(10);rootNode.setStyle("-fx-background-color:#DAE6F3");Button[]buttons=newButton[8];

for(inti=0;i<8;i++){buttons[i]=newButton("按鈕"+(i+1));rootNode.getChildren().add(buttons[i]);

}FlowPaneDemo.javaGridPane是網(wǎng)格面板,它可以創(chuàng)建靈活的包含行和列的網(wǎng)格,每個單元格中可以放置一個控件或其他面板,控件可以跨多個單元格。網(wǎng)格面板適合于創(chuàng)建表單和需要按行和列組織的布局。GridPane類只有一個默認的構(gòu)造方法。15.4.7GridPane面板創(chuàng)建GridPane對象后可以設(shè)置它的屬性,常用的方法如下:publicvoidsetHgap(doublevalue):設(shè)置控件水平間距。publicvoidsetVgap(doublevalue):設(shè)置控件垂直間距。publicfinalvoidsetPadding(Insetsvalue):設(shè)置內(nèi)容與邊界的距離。publicvoidadd(Nodechild,intcolumnIndex,introwIndex):將控件添加到指定的單元格中。columnIndex為單元格列的序號,rowIndex為單元格行的序號,網(wǎng)格窗口中左上角的單元列的序號為0,行的序號為0。15.4.7GridPane面板publicvoidadd(Nodechild,intcolumnIndex,introwIndex,intcolspan,introwspan):將控件添加到指定的單元格中。該方法用于一個控件占用多個單元格的情況。colspan為控件跨越的列數(shù),rowspan為控件跨越的行數(shù)。publicfinalvoidsetGridLinesVisible(booleanvalue):設(shè)置是否顯示網(wǎng)格線,這主要是為程序調(diào)試,默認值為false。15.4.7GridPane面板0,01,02,03,00,11,12,13,10,21,22,23,2rootNode.add(button,1,0,2,2);Labellabel1=newLabel("用戶名"),label2=newLabel("口令");TextFieldfield1=newTextField();PasswordFieldfield2=newPasswordField();Buttonok=newButton("確定"),cancel=newButton("取消");

//創(chuàng)建一水平控件框,并添加兩個按鈕HBoxhb=newHBox();hb.setSpacing(20);hb.setPadding(newInsets(10,20,10,20));hb.getChildren().addAll(ok,cancel);GridPaneDemo.java

//創(chuàng)建根面板GridPanerootNode=newGridPane();rootNode.setHgap(5);rootNode.setVgap(5);rootNode.setPadding(newInsets(10,10,10,10));

//向網(wǎng)格面板中添加控件rootNode.add(label1,0,0);rootNode.add(label2,0,1);rootNode.add(field1,1,0);rootNode.add(field2,1,1);rootNode.add(hb,0,2,2,1);//rootNode.setGridLinesVisible(true);//顯示網(wǎng)格線

Scenescene=newScene(rootNode,300,150);stage.setTitle("用戶登錄");stage.setScene(scene);stage.show();StackPane稱為棧面板布局,它將所有節(jié)點放入一個棧中,每個節(jié)點添加到前一個節(jié)點上。這種布局可以在形狀或圖像上疊加文本,或者疊加常用形狀創(chuàng)建復(fù)雜形狀。15.4.8StackPane面板下面代碼使用StackPane面板布局,將橢圓疊加到矩形上,將文本疊加到橢圓上。StackPanerootNode=newStackPane();Rectanglerectangle=newRectangle(80,100,Color.GRAY);rectangle.setStroke(Color.RED);

Ellipseellipse=newEllipse(88,45,45,30);ellipse.setFill(Color.BLUE);ellipse.setStroke(Color.LIGHTGREY);Texttext=newText("3");text.setFont(Font.font(null,38));text.setFill(Color.WHITE);StackPaneDemo.javarootNode.getChildren().addAll(rectangle,ellipse,text);Scenescene=newScene(rootNode,200,100);stage.setTitle("棧面板示例");stage.setScene(scene);stage.show();6.1.1課堂討論及訓(xùn)練Java語言程序設(shè)計(第4版)在線答疑QQ群:288639486編寫程序,要求4個按鈕添加到HBox面板中,將該面板添加到BorderPane根面板的下方。創(chuàng)建一個標簽,把它添加到Pane面板中,將Pane面板添加到根面板的中央。Java語言程序設(shè)計15.5Color類和Font類Color類Java語言程序設(shè)計(第4版)清華大學(xué)出版社2023使用javafx.scene.paint.Color類可以創(chuàng)建顏色對象,并為形狀或文本指定不同的顏色??梢酝ㄟ^Color類的常量創(chuàng)建顏色,還可通過構(gòu)造方法創(chuàng)建顏色Color類的靜態(tài)方法創(chuàng)建顏色。6.1.1Color類Java語言程序設(shè)計(第4版)

QQ群:288639486Color類中定義了構(gòu)造方法可以創(chuàng)建顏色對象。

Color(double

red,double

green,double

blue,double

opacity)

Colorc=newColor(0,0,1,1.0);6.1.1Color類Java語言程序設(shè)計(第4版)Color類還定義了多種靜態(tài)方法可以返回顏色對象,如color()方法、rgb()方法和web()方法等,這些方法都可以省略(默認值是1.0)或指定顏色的透明度。Colorc=Color.color(0,0,1.0);Colorc=Color.rgb(0,0,255);Colorc=Color.web("0x0000FF",1.0);6.1.1Font類Java語言程序設(shè)計(第4版)Font類的實例表示字體,包含字體的相關(guān)信息,如字體名、字體粗細、字體形態(tài)和大小。構(gòu)造方法:

Font(doublesize)

Font(Stringname,doublesize)6.1.1Font類Java語言程序設(shè)計(第4版)

QQ群:288639486用靜態(tài)方法返回字體對象:

staticFontfont(Stringfamily,

FontWeightweight,doublesize)

staticFontfont(Stringfamily,FontWeightweight,FontPostureposture,doublesize)FontPosture枚舉常量:

ITALIC,斜體REGULAR,正常體FontWeight枚舉常量:

BOLD,粗體LIGHT,輕體NORMAL,正常體6.1.1Font類Java語言程序設(shè)計(第4版)

QQ群:288639486使用getFamily()實例方法返回系統(tǒng)默認的字體。

staticList<String>getFamilies()staticList<String>getFontNames()Java語言程序設(shè)計15.6JavaFX形狀6.1.1Line類創(chuàng)建直線,需要為Line實例指定起始坐標和終點坐標。構(gòu)造方法:

publicLine()

publicLine(double

startX,double

startY,double

endX,double

endY)Lineline=newLine();line.setStartX(100);//設(shè)置起點坐標line.setStartY(10);line.setEndX(10);//設(shè)置終點坐標line.setEndY(110);Lineline=newLine(100,10,10,110);Line類Java語言程序設(shè)計(第4版)

QQ群:2886394866.1.1Rectangle類創(chuàng)建矩形,創(chuàng)建矩形需要指定矩形的寬度和高度以及矩形的左上角坐標位置。構(gòu)造方法:

Rectangle(doubewidth,doubleheight)

Rectangle(doubewidth,doubleheight,Paintfill)Rectangle(doublex,doubley,doubewidth,doubleheight)Rectangle類Java語言程序設(shè)計(第4版)

QQ群:2886394866.1.1Circle類創(chuàng)建圓形,可以用構(gòu)造方法創(chuàng)建圓形對象。圓形對象包括圓心坐標、半徑和顏色等屬性。構(gòu)造方法:

Circle(douberadius)

Circle(doublecenterX,doublecenterY,douberadius)Circle(doublecenterX,doublecenterY,douberadius,Paintfill)Circle類Java語言程序設(shè)計(第4版)在線答疑QQ群:2886394866.1.1可以使用默認構(gòu)造方法創(chuàng)建圓形對象,然后通過setter方法設(shè)置各屬性值。下面代碼創(chuàng)建的圓形對象其圓心坐標是(100,70),半徑是50.0,填充顏色為藍色。

Circlecircle=newCircle();circle.setCenterX(100.0f);//設(shè)置圓心坐標circle.setCenterY(70.0f);circle.setRadius(50.0f);//設(shè)置圓的半徑circle.setFill(Color.BLUE);Circle類Java語言程序設(shè)計(第4版)

QQ群:2886394866.1.1Ellipse類創(chuàng)建橢圓,橢圓對象包括圓心坐標(centerX,centerY)、x軸半徑radiusX和y軸半徑radiusY等屬性構(gòu)造方法:

Ellipse(doubleradiusX,doubleradiusY)

Ellipse(doublecenterX,doublecenterY,doubleradiusX,doubleradiusY)Ellipse類Java語言程序設(shè)計(第4版)

QQ群:2886394866.1.1下面代碼創(chuàng)建一個橢圓實例。Ellipseellipse=newEllipse(110,80,80,40);ellipse.setStrokeWidth(3);ellipse.setStroke(Color.BLUE);ellipse.setFill(Color.WHITE);Ellipse類Java語言程序設(shè)計(第4版)

QQ群:288639486Arc類創(chuàng)建一段弧。一段弧可以認為是橢圓的一部分,由參數(shù)centerX、centerY、radiusX、radiusY、startAngle、length以及弧的類型(ArcType.OPEN、ArcType.CHORD以及ArcType.ROUND)來確定。Arc類構(gòu)造方法:Arc()Arc(doublex,doubley,doubleradiusX,doubleradiusY,doublestartAngle,doublelength)Polygon類創(chuàng)建多邊形,可以用構(gòu)造方法創(chuàng)建多邊形對象。通過一個double型數(shù)組指定多邊形各頂點坐標。創(chuàng)建多邊形的關(guān)鍵是確定點的坐標。Polygon類構(gòu)造方法:

Polygon()

Polygon(double…points)javafx.scene.text.Text類創(chuàng)建文本對象,它是Shape類的子類,因此它也繼承了Shape類的許多功能,如縮放、變換和旋轉(zhuǎn)等。Text類構(gòu)造方法:

publicText(Stringtext)

publicText(doublex,doubley,Stringtext)可以創(chuàng)建多個Text節(jié)點,然后使用TextFlow布局面板將它們放置在一個文本流中。TextFlow對象使用每個Text節(jié)點的文本和字體,但忽略子節(jié)點的x,y坐標,它使用自己的寬度和文本對齊方式?jīng)Q定子節(jié)點的位置。Text類Java語言程序設(shè)計15.7Image和ImageView類可以在JavaFX的場景圖中顯示標準的圖像,有多種標準格式圖像,如.jpg、.png、.gif和.bmp等,這需要兩步:Image和ImageView類使用javafx.scene.image.Image類從本地系統(tǒng)或遠程服務(wù)器加載圖像。使用javafx.scene.image.ImageView節(jié)點顯示圖像。構(gòu)造方法:

publicImage(Stringurl)publicImage(InputStreaminputStream)publicImage(Stringurl,booleanbackLoading)Image和ImageView類下面代碼加載本地文件系統(tǒng)中的圖像文件。varinput=newFileInputStream("images/flower.png");varlocalImage=newImage(input);也可以使用下面代碼加載本地文件系統(tǒng)中的圖像文件。Filefile=newFile("D:\\images\\koala.png");StringlocalUrl=file.toURI().toURL().toString();ImagelocalImage=newImage(localUrl,false)Image和ImageView類下面代碼加載Web服務(wù)器上的圖像文件。StringremoteUrl="/myphoto.jpg";ImageremoteImage=newImage(remoteUrl,true);顯示圖像:使用ImageView節(jié)點對象Image和ImageView類構(gòu)造方法:

publicImageView()publicImageView(Imageimage)publicImageView(StringfileUrl)由于ImageView也是Node對象,因此也可以對它應(yīng)用變換、縮放、模糊等特效。編寫程序,顯示從一副52張的撲克牌中隨機選擇的4張牌,如圖所示。課堂討論及訓(xùn)練Java語言程序設(shè)計15.8特效實現(xiàn)在JavaFX中可以對各種節(jié)點對象(包括形狀、文本以及各種控件等)實施特殊效果,如陰影、倒影、模糊、發(fā)光等,可以調(diào)用節(jié)點的setEffect()方法設(shè)置這些效果。JavaFX常用特效類如表15-3所示。概述特效類說明特效類說明Bloom增強亮度效果Glow實現(xiàn)節(jié)點發(fā)光效果BoxBlur對節(jié)點實施模糊效果InnerShadow在節(jié)點內(nèi)顯示陰影GaussianBur對節(jié)點進行高斯模糊Lighting創(chuàng)建閃電光源的效果DropShadow實現(xiàn)節(jié)點陰影效果Reflection顯示節(jié)點倒影使用DropShadow對象實現(xiàn)節(jié)點內(nèi)容的陰影效果,可以指定陰影的顏色、半徑和偏移量。下面代碼對一個文本對象和一個圓對象設(shè)置了陰影效果。15.8.1陰影效果DropShadowdropShadow=newDropShadow();dropShadow.setRadius(5.0);dropShadow.setOffsetX(3.0);dropShadow.setOffsetY(3.0);dropShadow.setColor(Color.color(0.4,0.5,0.5));DropShadowDemo.Java//為文本設(shè)置陰影特效Texttext=newText(10,70,"JavaFX陰影效果");text.setCache(true);text.setFill(Color.web("0x3b596d"));text.setFont(Font.font(null,FontWeight.BOLD,30));text.setEffect(dropShadow);//為圓設(shè)置陰影特效DropShadowdropShadow2=newDropShadow();dropShadow2.setOffsetX(6.0);dropShadow2.setOffsetY(4.0);Circlecircle=newCircle(50.0,125.0,30.0,Color.STEELBLUE);circle.setCache(true);circle.setEffect(dropShadow2);使用BoxBlur類可對節(jié)點進行模糊處理,它是一種快速的圖像模糊,模糊的程度取決于3個參數(shù)。下面是BoxBlur類帶參數(shù)的構(gòu)造方法:

BoxBlur(doublewidth,doubleheight,intiterations)15.8.2模糊效果這里,width和height指定模糊框的大小,值在0到255之間。iterations是迭代次數(shù),值在1到3之間。下面代碼使用BoxBlur對文本進行模糊處理。BoxBlurboxBlur=newBoxBlur();boxBlur.setWidth(5);boxBlur.setHeight(1);boxBlur.setIterations(2);//為文本設(shè)置模糊特效Texttext=newText();text.setText("文本模糊效果!");text.setFill(Color.web("0x3b596d"));text.setFont(Font.font(null,FontWeight.BOLD,30));text.setX(8);text.setY(50);text.setEffect(boxBlur);BoxBlurDemo.java使用Reflection類可對節(jié)點設(shè)置倒影效果,它是在節(jié)點內(nèi)容下方產(chǎn)生倒影。使用setFraction(doublevalue)方法指定倒影可見部分的比例,value的范圍從0.0到1.0,默認值為0.75,表示可見2/3。15.8.3倒影效果下面代

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論