Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 JavaFX圖形用戶界面程序設(shè)計(jì)_第1頁
Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 JavaFX圖形用戶界面程序設(shè)計(jì)_第2頁
Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 JavaFX圖形用戶界面程序設(shè)計(jì)_第3頁
Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 JavaFX圖形用戶界面程序設(shè)計(jì)_第4頁
Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 JavaFX圖形用戶界面程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第12章JavaFX圖形用戶界面程序設(shè)計(jì)1教學(xué)目標(biāo)(1) 區(qū)分JavaFX、Swing和AWT(2) 理解舞臺(tái)、場(chǎng)景和節(jié)點(diǎn)間的關(guān)系(3) 使用GridPane、BorderPane、TitledPane、HBox和Vbox等實(shí)現(xiàn)界面布局(4) 了解節(jié)點(diǎn)的通用屬性style(5) 使用Color類創(chuàng)建顏色(6) 使用Font創(chuàng)建字體(7) 使用Image類創(chuàng)建圖形以及使用ImageView創(chuàng)建圖形視圖2教學(xué)目標(biāo)(8) 理解事件、事件源以及事件類(9) 定義處理器類、注冊(cè)處理器對(duì)象以及編寫處理器代碼(10)使用內(nèi)部類、匿名類和lambda表達(dá)式進(jìn)行事件處理(11)使用Button類創(chuàng)建具有文本和圖形的按鈕,并設(shè)置處理器(12)使用TableView顯示數(shù)據(jù)記錄集(13)實(shí)用菜單欄組件,設(shè)置菜單項(xiàng)3內(nèi)容412.1JavaFX概述12.2JavaFX程序的結(jié)構(gòu)12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅(qū)動(dòng)編程12.7JavaFXUI控件內(nèi)容512.1JavaFX概述12.2JavaFX程序的結(jié)構(gòu)12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅(qū)動(dòng)編程12.7JavaFXUI控件12.1JavaFX概述AWT(AbstractWindowToolkit):抽象窗體工具包Swing:更少依賴于目標(biāo)平臺(tái),且使用更少的本地資源JavaFX:融入了現(xiàn)代GUI技術(shù)以方便開發(fā)富因特網(wǎng)應(yīng)用。支持無縫地在桌面或web瀏覽器中運(yùn)行支持FXML腳本,類似于HTML編寫Web圖形用戶界面為觸摸設(shè)備提供多點(diǎn)觸控支持,如平板和智能手機(jī)具有內(nèi)建的2D、3D、動(dòng)畫支持,以及視頻、音頻播放功能JDK7開始成為Java平臺(tái)一部分Java11從JDK中刪除,需單獨(dú)下載和安裝。仍與Java密切相關(guān),支持與Swing、Spring等的集成。6內(nèi)容712.1JavaFX概述12.2JavaFX程序的結(jié)構(gòu)12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅(qū)動(dòng)編程12.7JavaFXUI控件12.2JavaFX程序的基本結(jié)構(gòu)8為了創(chuàng)建一個(gè)基本的JavaFX應(yīng)用程序,需擴(kuò)展javafx.application.Application,并重寫start()方法。launch方法是JavaFX程序的啟動(dòng)方法,該方法是Application類中的靜態(tài)方法。從命令行運(yùn)行JavaFx程序,main()方法不是必需的從一個(gè)不完全支持JavaFx的IDE啟動(dòng)JavaFx程序,main()方法可能是需要的運(yùn)行一個(gè)無main()方法的JavaFx應(yīng)用程序,launch方法自動(dòng)被JVM調(diào)用示例:程序清單12-1FirstJavaFX.java12.2JavaFX程序的基本結(jié)構(gòu)9Stage(舞臺(tái)):表示一個(gè)窗口,是所有JavaFx對(duì)象的容器每個(gè)JavaFx程序至少有一個(gè)主窗口即主舞臺(tái),由JVM自動(dòng)創(chuàng)建,以實(shí)參傳遞給start方法一個(gè)JavaFx程序可創(chuàng)建多個(gè)舞臺(tái),程序清單12-2SecondJavaFX.javaScene(場(chǎng)景):包含所有物理內(nèi)容(節(jié)點(diǎn))通常,所有待顯示對(duì)象放入場(chǎng)景對(duì)象中Stage的方法setScene,用于設(shè)置場(chǎng)景SceneGraph(場(chǎng)景圖):不是一個(gè)具體類所有節(jié)點(diǎn)的集合場(chǎng)景圖內(nèi)的節(jié)點(diǎn)以樹狀結(jié)構(gòu)進(jìn)行組織,總有一個(gè)根節(jié)點(diǎn)通常,JavaFx程序使用某種布局面板作為根節(jié)點(diǎn),其他節(jié)點(diǎn)作為子節(jié)點(diǎn)StageSceneSceneGraph根節(jié)點(diǎn)分支節(jié)點(diǎn)葉子節(jié)點(diǎn)葉子節(jié)點(diǎn)葉子節(jié)點(diǎn)12.2JavaFX程序的基本結(jié)構(gòu)10JavaFX類體系12-1每個(gè)JavaFX主類__________.implementsjavafx.application.Applicationextendsjavafx.application.Application重寫start(Stages)方法重寫start()方法ABCD提交多選題1分12-2以下哪項(xiàng)陳述是正確的?啟動(dòng)JavaFX主類時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)主stage??梢栽贘avaFX程序中顯示多個(gè)stage。通過調(diào)用stage的show()方法來顯示stage。使用addScene方法將場(chǎng)景放置在stage中ABCD提交使用setScene方法將場(chǎng)景放置在stage上E多選題1分內(nèi)容1312.1JavaFX概述12.2JavaFX程序的結(jié)構(gòu)12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅(qū)動(dòng)編程12.7JavaFXUI控件12.3屬性綁定14JavaFX引入了一個(gè)稱為屬性綁定的新概念,可以將一個(gè)目標(biāo)對(duì)象和一個(gè)源對(duì)象綁定。如果源對(duì)象中的值改變了,目標(biāo)對(duì)象也將自動(dòng)改變。綁定對(duì)象(綁定屬性):目標(biāo)對(duì)象可綁定對(duì)象(可觀察對(duì)象):源對(duì)象目標(biāo)對(duì)象tObj采用bind方法和源對(duì)象sObj進(jìn)行綁定:tObj.bind(sObj);bind方法在perty.Property接口中定義。目標(biāo)對(duì)象是javafx.Bperty.Property的一個(gè)實(shí)例,許多JavaFX類(面板、節(jié)點(diǎn)等)的屬性都是Property的實(shí)例。源對(duì)象是javafx.beans.value.ObservableValue接口的一個(gè)實(shí)例。ObservableValue實(shí)例是一個(gè)包裝了值的實(shí)體,允許值發(fā)生改變時(shí)被觀察到。12.3屬性綁定15JavaFX為基本數(shù)據(jù)類型和字符串定義綁定屬性。double,float,long,int,boolean,String對(duì)應(yīng)綁定屬性(抽象類):DoubleProperty,FloatProperty,LongProperty,IntegerProperty,BooleanProperty,StringProperty具體子類屬性前加Simple,如:SimpleDoublePropertyJavaFX類中的每個(gè)綁定屬性都有一個(gè)獲取方法和設(shè)置方法用于返回和設(shè)置屬性的值。同時(shí)還有一個(gè)獲取方法返回屬性本身。例如,Circle的屬性centerX:值的獲取方法:getCenterX()值的設(shè)置方法:setCenterX(double)屬性的獲取方法:centerXProperty()程序清單12-3PropertyBindDemo.java12.3屬性綁定16內(nèi)容1712.1JavaFX概述12.2JavaFX程序的結(jié)構(gòu)12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅(qū)動(dòng)編程12.7JavaFXUI控件12.4布局面板和組18面板:組織、定位、布局其內(nèi)部節(jié)點(diǎn)的容器javafx.scene.layout.Pane是這些類的基類類說明Pane面板類的基類,以getChiledren()返回內(nèi)部節(jié)點(diǎn)列表HBox單行水平布局內(nèi)部節(jié)點(diǎn)VBox單列垂直布局內(nèi)部節(jié)點(diǎn)StackPane居中,以堆棧式放置所有內(nèi)部節(jié)點(diǎn)BorderPane面板劃分為頂部、底部、左側(cè)、右側(cè)和中間區(qū)域,用于分區(qū)域放置節(jié)點(diǎn)FlowPane以水平或垂直往復(fù)折返式放置節(jié)點(diǎn)GridPane內(nèi)部節(jié)點(diǎn)以網(wǎng)格式布局12.4布局面板和組javafx.scene.Group用于將節(jié)點(diǎn)組成一個(gè)邏輯組來進(jìn)行轉(zhuǎn)換或縮放。例如,下面的代碼通過一個(gè)循環(huán)將5個(gè)矩形添加到Group對(duì)象g中19Groupg=newGroup();for(inti=0;i<5;i++){Rectangler=newRectangle();r.setY(i*20);r.setWidth(100);r.setHeight(10);r.setFill(Color.RED);g.getChildren().add(r);}12.4.1Pane面板20Pane面板是所有面板類的基類,它對(duì)其中的節(jié)點(diǎn)對(duì)象的顯示次序不施加任何的控制Pane面板調(diào)整自己的大小以適應(yīng)其內(nèi)容示例:程序清單12-4PaneDemo.java在往面板對(duì)象中增加節(jié)點(diǎn)時(shí),需要先調(diào)用方法getChildren(),返回一個(gè)列表對(duì)象,再調(diào)用add或addAll方法,往列表中增加節(jié)點(diǎn)頂部面板左邊底部右邊Insets:頂、右、底、左vGap垂直間距hGap水平間距12-3下列說法哪個(gè)是正確的?()一個(gè)Node可以放置在一個(gè)Pane中一個(gè)Node可以放置到一個(gè)Scene中一個(gè)Pane可以放置到一個(gè)Control中一個(gè)Shape可以放置到一個(gè)Control中ABCD提交單選題1分12-4將一個(gè)circle對(duì)象加入到一個(gè)面板中,使用()pane.add(circle);pane.addAll(circle);pane.getChildren().add(circle);pane.getChildren().addAll(circle);ABCD提交多選題1分12.4.2StackPane面板23StackPane將其節(jié)點(diǎn)依次疊加在另一個(gè)上,最后添加的節(jié)點(diǎn)位于最上面。默認(rèn)情況下,StackPane將設(shè)置為Pos.CENTER,指定節(jié)點(diǎn)居中對(duì)齊構(gòu)造方法:(1)publicStackPane():創(chuàng)建一個(gè)StackPane對(duì)象,默認(rèn)使用Pos.Center對(duì)齊方式。(2)publicStackPane(Node...children):創(chuàng)建一個(gè)StackPane對(duì)象,默認(rèn)使用Pos.Center對(duì)齊方式,可以添加不定數(shù)量的節(jié)點(diǎn)對(duì)象。示例:程序清單12-5StackPaneDemo.java12.4.3FlowPane面板24FlowPane按照節(jié)點(diǎn)加入的次序,從左到右或從上到下布局。當(dāng)一行或一列排滿遇到容器的邊界時(shí),則折返,開始新的一行或一列。枚舉常量Orientation.HORIZONTAL或者Orientation.VERTICAL可確定FlowPane內(nèi)部節(jié)點(diǎn)是按水平還是按垂直排列的。通過alignment設(shè)置FlowPane內(nèi)部節(jié)點(diǎn)的對(duì)齊方式,通過hgap和vgap設(shè)置節(jié)點(diǎn)左右或上下間距。示例:程序清單12-6FlowPaneDemo.java12.4.4GridPane面板25GridPane面板,用于對(duì)內(nèi)部節(jié)點(diǎn)按行和列對(duì)齊的樣式進(jìn)行布局。GridPane也可以采用讓一個(gè)節(jié)點(diǎn)跨越多個(gè)網(wǎng)格,實(shí)現(xiàn)更復(fù)雜的布局。GridPane僅提供了一個(gè)構(gòu)造方法:publicGridPane(),創(chuàng)建一個(gè)水平/垂直間距為0并且對(duì)齊方式為TOP_LEFT的GridPane對(duì)象。示例:程序清單12-7GridPaneDemo.java12.4.4GridPane面板2612.4.4GridPane面板272812-5在一個(gè)GridPane面板中,將一個(gè)結(jié)點(diǎn)加到第一行,第二列,使用________.pane.add(node,1,2);pane.getChildren().add(node,0,1);pane.add(node,0,1);pane.add(node,1,0);ABCD提交單選題1分12.4.5Vbox和HBox面板29VBox以垂直列的形式排列其內(nèi)部節(jié)點(diǎn);HBox以水平行的方式排列節(jié)點(diǎn)。構(gòu)造方法1)publicVBox\HBox():無參構(gòu)造方法,創(chuàng)建一個(gè)空的VBox\HBox對(duì)象。2)publicVBox\HBox(doublespacing):使用指定的間距創(chuàng)建一個(gè)VBox\HBox對(duì)象,并設(shè)置節(jié)點(diǎn)之間的垂直水平間距。3)publicVBox\HBox(Node…children):創(chuàng)建一個(gè)VBox\HBox對(duì)象,并將指定的節(jié)點(diǎn)添加進(jìn)來,默認(rèn)的間距為0。4)publicVBox\HBox(doublespacing,Node…children):使用指定的間距創(chuàng)建一個(gè)VBox\HBox對(duì)象,并將指定的節(jié)點(diǎn)添加進(jìn)來。示例:程序清單12-8VBox_HBoxDemo.java3012-6將兩個(gè)結(jié)點(diǎn)node1、node2放置到一個(gè)Hbox,使用___________.

p.add(node1,node2);p.addAll(node1,node2);p.getChildren().add(node1,node2);p.getChildren().addAll(node1,node2);ABCD提交單選題1分12.4.6BorderPane面板31BorderPane將節(jié)點(diǎn)放置在五個(gè)區(qū)域,各區(qū)域默認(rèn)對(duì)齊方式如下:1)Top區(qū)域:Pos.TOP_LEFT2)Bottom區(qū)域:Pos.BOTTOM_LEFT3)Left區(qū)域:Pos.TOP_LEFT4)Right區(qū)域:Pos.TOP_RIGHT5)Center區(qū)域:Pos.CENTER構(gòu)造方法:publicBorderPane():默認(rèn)構(gòu)造方法,創(chuàng)建一個(gè)沒有任何子節(jié)點(diǎn)的BorderPane對(duì)象。publicBorderPane(Nodecenter):創(chuàng)建一個(gè)BorderPane對(duì)象,并指定中間的子節(jié)點(diǎn)。publicBorderPane(Nodecenter,Nodetop,Noderight,Nodebottom,Nodeleft):創(chuàng)建一個(gè)BorderPane對(duì)象,并指定中間、頂部、右邊、底部、左邊和中間的節(jié)點(diǎn)。示例:程序清單12-9BorderPaneDemo.java內(nèi)容3212.1JavaFX概述12.2JavaFX程序的結(jié)構(gòu)12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅(qū)動(dòng)編程12.7JavaFXUI控件12.5Node節(jié)點(diǎn)33Node:是添加到場(chǎng)景圖中所有組件的基類。最常用的屬性:樣式styleJavaFX的樣式屬性類似于Web頁面中指定HTML元素樣式的CSS。因此JavaFX的樣式屬性也稱為JavaFXCSS。設(shè)定樣式的語法是styleName:value,多個(gè)樣式可通過分號(hào)(;)分隔,例如:circle.setStyle("-fx-stroke:black;-fx-fill:blue");變換Transformation:一組屬性變換,對(duì)節(jié)點(diǎn)進(jìn)行平移、旋轉(zhuǎn)、縮放或者剪切平移指沿著坐標(biāo)系的x軸或y軸移動(dòng)節(jié)點(diǎn)旋轉(zhuǎn)變換是指圍繞指定的“中心”點(diǎn)旋轉(zhuǎn)節(jié)點(diǎn)的坐標(biāo)空間,使節(jié)點(diǎn)看起來像旋轉(zhuǎn)縮放變換會(huì)導(dǎo)致節(jié)點(diǎn)根據(jù)縮放因子放大或縮小剪切變換,也稱為扭曲,是指通過剪切因子指定節(jié)點(diǎn)在x和y軸方向上的傾斜程度。示例:button.setRotate(30);//把一個(gè)按鈕順時(shí)針旋轉(zhuǎn)30度3412-7節(jié)點(diǎn)對(duì)象設(shè)定樣式的語法是

[填空1]

作答填空題1分3512.5.1ColorColor類可用于創(chuàng)建顏色。Color類是不可修改的。RGBA模型:r:red,g:green,b:blue,a:alpha可通過三色的值來定義一個(gè)顏色0.0<=r,g,b<=1.0或0<=r,g,b<=255(int)0.0(透明)<=opacity<=1.0(不透明)示例:程序清單12-10Color_demo.java方法說明staticColorcolor(doublered,doublegreen,doubleblue)以紅綠藍(lán)三個(gè)分量創(chuàng)建一個(gè)不透明的顏色實(shí)例,參數(shù)范圍是0-1.0staticColorcolor(doublered,doublegreen,doubleblue,doubleopacity)以紅綠藍(lán)及不透明度四個(gè)分量創(chuàng)建一個(gè)顏色實(shí)例,參數(shù)范圍是0-1.0Colorbrighter()創(chuàng)建一個(gè)比當(dāng)前Color對(duì)象更亮的對(duì)象Colordarker()創(chuàng)建一個(gè)比當(dāng)前Color對(duì)象更暗的對(duì)象staticColorrgb(intred,intgreen,intblue)以紅綠藍(lán)三個(gè)分量創(chuàng)建一個(gè)不透明的顏色實(shí)例,三個(gè)分量值的范圍是0-255staticColorrgb(intred,intgreen,intblue,doubleopacity)以紅綠藍(lán)及不透明度四個(gè)分量創(chuàng)建顏色實(shí)例,opacity取值范圍是0-1staticColorvalueOf(Stringvalue)基于一個(gè)字符串表示創(chuàng)建一個(gè)顏色實(shí)例staticColorweb(StringcolorString)基于一個(gè)HTML或CSS屬性字符串,創(chuàng)建一個(gè)RGB顏色實(shí)例staticColorweb(StringcolorString,doubleopacity)基于一個(gè)HTML或CSS屬性字符串及指定的不透明度,創(chuàng)建一個(gè)RGB顏色實(shí)例12.5.2Fontjavafx.scene.text.Font類描述字體的字體系列名稱、粗細(xì)、字體姿勢(shì)和大小等,也是一個(gè)不可變類,即一個(gè)Font對(duì)象在創(chuàng)建之后不可改變。字體系列名稱指在操作系統(tǒng)中安裝的字體系列名,比如TimesNewRoman、Courier、Consolas、宋體、楷體等36屬性說明Stringfamily字體系列doublesize字體大小,被描述為以點(diǎn)為單位指定,這些點(diǎn)是大約1/72英寸的真實(shí)世界測(cè)量值,可用字號(hào)表示,如12、24等FontWeightweight表示字體的粗細(xì)程度,枚舉類型,取值:FontWeight.BLACK(900)、FontWeight.BOLD(700)、FontWeight.MEDIUM(500)、FontWeight.NORMAL(400)、FontWeight.LIGHT(300)、FontWeight.THIN(100)、FontWeight.EXTRA_Bold(800)、FontWeight.SEMI_BOLD(600)、FontWeight.EXTRA_LIGHT(200),圓括號(hào)中數(shù)字表示粗細(xì)程度。FontPosturestyle字體姿勢(shì),表示字體是否斜體。枚舉類型,取值:FontPosture.REGULAR(正常體)、FontPosture.ITALIC(斜體)12.5.2Font37方法說明staticFontfont(Stringfamily,doublesize)根據(jù)字體系列名稱和大小搜索合適的字體。staticFontfont(Stringfamily,FontPostureposture,doublesize)根據(jù)字體系列名稱和姿勢(shì)樣式搜索適當(dāng)?shù)淖煮w。staticFontfont(Stringfamily,FontWeightweight,doublesize)根據(jù)字體系列名稱和粗細(xì)、大小搜索適當(dāng)?shù)淖煮w。staticFontfont(Stringfamily,FontWeightweight,FontPostureposture,doublesize)根據(jù)字體系列名稱、粗細(xì)、姿勢(shì)、大小搜索適當(dāng)?shù)淖煮w。staticFontgetDefault()獲取默認(rèn)字體,該字體將來自“System”系列,通常為“Regular”樣式StringgetFamily()返回此字體的字體系列名稱staticList<String>getFamilies()獲取用戶系統(tǒng)上安裝的所有字體系列,包括任何應(yīng)用程序字體或SDK字體。staticList<String>getFontNames()獲取用戶系統(tǒng)上安裝的所有字體系列的字體全名,包括任何應(yīng)用程序字體或SDK字體。staticList<String>getFontNames(Stringfamily)獲取字體系列family的所有字體全名StringgetName()返回字體名稱doublegetSize()返回字體大小StringgetStyle()返回字體樣式12.5.2Font構(gòu)造方法Font(doublesize):以給定的字體大小,使用默認(rèn)名“System”創(chuàng)建一個(gè)Font對(duì)象Font(Stringname,doublesize):使用指定的字體全名和字體大小創(chuàng)建一個(gè)Font對(duì)象。字體全名由字體系列名稱和字體粗細(xì)、字體姿勢(shì)等構(gòu)成示例:程序清單12-11Font_demo.java383912-8以下哪項(xiàng)陳述是正確的?Color對(duì)象是不可變的。Font對(duì)象是不可變的。創(chuàng)建顏色對(duì)象后,不能更改其內(nèi)容。字體對(duì)象一旦創(chuàng)建,就不能更改其內(nèi)容。ABCD提交多選題1分12.5.3Shape類40JavaFX提供了多種形狀類,用于繪制文本、直線、圓、矩形、圓、橢圓、弧、多邊形、折線。Shape是抽象類,定義一些共同屬性:fill,stroke,strokeWidth1)Textjavafx.scene.shape.Text類定義了一個(gè)節(jié)點(diǎn),用于在一個(gè)起始坐標(biāo)點(diǎn)(x,y)處顯示一個(gè)字符串Text類有3個(gè)構(gòu)造方法:Text(),創(chuàng)建一個(gè)空Text;Text(Stringtext),以指定文本text創(chuàng)建一個(gè)文本對(duì)象;Text(doublex,doubley,Stringtext),以指定x、y坐標(biāo)和文本text創(chuàng)建一個(gè)文本對(duì)象。412)Linejavafx.scene.shape.Line類用于繪制一條線段,通過4個(gè)屬性(starX、starY、endX、endY)定義一條線段的起點(diǎn)和終端423)RectangleRectangle類通過左上角坐標(biāo)(x,y)、寬度w、高度h創(chuàng)建一個(gè)矩形對(duì)象,還可以設(shè)置其圓角處弧的水平直徑aw(默認(rèn)為0,設(shè)置方法setArcWidth(aw))和垂直直徑ah(默認(rèn)為0,設(shè)置方法setArcHeight(ah))434)javafx.scene.shape.Ellipse類和Circle類Ellipse類(橢圓類)通過橢圓中心坐標(biāo)(x,y)、橢圓水平半徑radiusX、橢圓垂直半徑radiusY創(chuàng)建一個(gè)橢圓對(duì)象Circle類通過圓心坐標(biāo)(x,y)、半徑radius創(chuàng)建一個(gè)圓對(duì)象。445)javafx.scene.shape.Arc類一段弧可以看作一個(gè)橢圓的一部分,因此,Arc類可通過橢圓中心坐標(biāo)(x,y)、橢圓水平半徑radiusX、橢圓垂直半徑radiusY、起始角度startAngle、跨度length(弧所覆蓋的角度)創(chuàng)建一段弧角度使用度為單位,遵循通常的數(shù)學(xué)約定,即,0度是水平向左,正的角度是從0度開始順時(shí)針方向旋轉(zhuǎn)的角度。456)javafx.scene.shape.Polygon類和Polyline類Polygon和Polyline類分別描述多邊形和折線對(duì)象。Polygon和Polyline都定義了依次相連的點(diǎn),這些點(diǎn)構(gòu)成一個(gè)序列。兩者的區(qū)別是在繪圖時(shí)Polyline的第一個(gè)點(diǎn)和最后一個(gè)點(diǎn)不畫連接線,不會(huì)構(gòu)成封閉區(qū)域,不需要用填充色填充。467)Shape示例示例:程序清單12-12給出了一個(gè)創(chuàng)建各種形狀的示例,ShapesDemo.java474812.5.4Image和ImageView類Image類表示一個(gè)圖像,ImageView類可以用于顯示一個(gè)圖像表明圖像是否正確載入圖像的高度圖像的寬度圖像載入已經(jīng)完成的百分比從一個(gè)文件或一個(gè)URL創(chuàng)建一個(gè)圖像4912.5.4Image和ImageView類圖像改變大小來適應(yīng)邊界框的高度圖像改變大小來適應(yīng)邊界框的寬度ImageView原點(diǎn)的y坐標(biāo)圖像視圖中顯示的圖像創(chuàng)建一個(gè)ImageView用給定的圖像創(chuàng)建一個(gè)ImageView從給定文件或URL載入的圖像創(chuàng)建一個(gè)ImageViewImageView原點(diǎn)的x坐標(biāo)程序清單12-13ImageViewApp_Demo.java內(nèi)容5012.1JavaFX概述12.2JavaFX程序的結(jié)構(gòu)12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅(qū)動(dòng)編程12.7JavaFXUI控件12.6事件驅(qū)動(dòng)編程5112.6.1事件處理基本概念12.6.2事件委派和事件處理12.6.3示例:簡(jiǎn)易計(jì)算器12.6.4鼠標(biāo)事件12.6.5鍵盤事件12.6.1事件處理基本概念為完成具有交互功能的GUI程序,需要使用事件驅(qū)動(dòng)編程,對(duì)事件進(jìn)行響應(yīng)。簡(jiǎn)單示例:程序清單12-14EventHandling_demo.java事件:可被定義為一個(gè)告知程序某件事發(fā)生的信號(hào)。

事件由外部的用戶動(dòng)作觸發(fā),如鼠標(biāo)的移動(dòng)、單擊、鍵盤按鍵。事件源對(duì)象:產(chǎn)生一個(gè)事件并且觸發(fā)它的組件稱為事件源對(duì)象。事件處理器(EventHandler)或事件監(jiān)聽器(EventListener)事件監(jiān)聽器是一個(gè)接口或類,用于定義事件處理的行為和回調(diào)方法。它定義了特定類型的事件發(fā)生時(shí)應(yīng)該執(zhí)行的操作,負(fù)責(zé)偵聽和響應(yīng)特定類型的事件。525312.6.1事件處理基本概念事件類型(EventType)事件類型表示特定類型的事件,如鼠標(biāo)點(diǎn)擊、鍵盤按動(dòng)等。一個(gè)事件是一個(gè)事件類的實(shí)例。Java事件類的根類是java.util.EventObject,而JavaFX事件類的根類是javafx.event.Event。Event是EventObject的子類。一個(gè)事件對(duì)象包含與事件相關(guān)的任何屬性事件源對(duì)象可以通過EventObject類的getSource獲取EventObject子類處理特定類型的事件EventObject12.6.1事件處理基本概念表12-20給出了用戶動(dòng)作、源對(duì)象、事件類型、處理器接口以及處理器。5412.6事件驅(qū)動(dòng)編程5512.6.1事件處理基本概念12.6.2事件委派和事件處理12.6.3示例:簡(jiǎn)易計(jì)算器12.6.4鼠標(biāo)事件12.6.5鍵盤事件5612.6.2事件委派和事件處理JavaFX采用事件委派機(jī)制進(jìn)行事件處理:一個(gè)事件源對(duì)象(如按鈕)觸發(fā)一個(gè)事件(如鼠標(biāo)點(diǎn)),然后該事件對(duì)象委派給事件處理器處理。成員內(nèi)部類形式:程序清單12-15HandleEventInnerCls.java匿名內(nèi)部類形式:程序清單12-16HandleEventAnonymousInner.javaLambda表達(dá)式形式:程序清單12-17HandelEventLambda.java12.6事件驅(qū)動(dòng)編程5712.6.1事件處理基本概念12.6.2事件委派和事件處理12.6.4示例:簡(jiǎn)易計(jì)算器12.6.5鼠標(biāo)事件12.6.6鍵盤事件12.6.3示例:簡(jiǎn)易計(jì)算器本例使用JavaFX設(shè)計(jì)一個(gè)簡(jiǎn)易計(jì)算器,支持簡(jiǎn)單的四則運(yùn)算(支持負(fù)數(shù)),在此基礎(chǔ)上,實(shí)現(xiàn)了連續(xù)運(yùn)算功能。程序演示:程序清單12-18Calculator.java5812.6事件驅(qū)動(dòng)編程5912.6.1事件處理基本概念12.6.2事件委派和事件處理12.6.3示例:簡(jiǎn)易計(jì)算器12.6.4鼠標(biāo)事件12.6.5鍵盤事件12.6.4鼠標(biāo)事件當(dāng)一個(gè)鼠標(biāo)按鍵在一個(gè)節(jié)點(diǎn)上或者一個(gè)場(chǎng)景中被按下、釋放、單擊、移動(dòng)或拖動(dòng)時(shí),一個(gè)MouseEvent被觸發(fā)。MouseEvent對(duì)象捕捉事件發(fā)生時(shí)的點(diǎn)擊次數(shù)、鼠標(biāo)位置坐標(biāo)以及哪個(gè)鼠標(biāo)按鍵被按下鼠標(biāo)按鍵由枚舉類型MouseButton表示MouseButton枚舉常量有:1)PRIMARY,主要鼠標(biāo)按鈕(通常是左鍵);2)SECONDARY,次要鼠標(biāo)按鈕(通常是右鍵);3)MIDDLE,中間鼠標(biāo)按鈕(通常是滾輪點(diǎn)擊);4)NONE,沒有鼠標(biāo)按鈕;5)BACK,后退鼠標(biāo)按鈕;6)FORWARD,前進(jìn)鼠標(biāo)按鈕??梢允褂肕ouseEvent對(duì)象的getButton方法來檢測(cè)哪個(gè)按鈕被按下。例如,mouseEventObj.getButton()==MouseButton.PRIMARY還可使用isPrimaryButtonDown()、isSecondaryButtonDown()、isMiddleButtonDown()來測(cè)試相應(yīng)的鍵是否被按下6012.6.4鼠標(biāo)事件用戶動(dòng)作事件注冊(cè)方法按下鼠標(biāo)setOnMousePressed(EventHandler<MouseEvent>)釋放鼠標(biāo)setOnMouseReleased(EventHandler<MouseEvent>)單擊鼠標(biāo)setOnMouseClicked(EventHandler<MouseEvent>)鼠標(biāo)進(jìn)入setOnMouseEntered(EventHandler<MouseEvent>)鼠標(biāo)退出setOnMouseExited(EventHandler<MouseEvent>)鼠標(biāo)移動(dòng)setOnMouseMoved(EventHandler<MouseEvent>)鼠標(biāo)拖動(dòng)setOnMouseDraged(EventHandler<MouseEvent>)61示例:鼠標(biāo)點(diǎn)擊文本時(shí),文本的字體會(huì)變化;當(dāng)鼠標(biāo)拖動(dòng)文本時(shí),文本跟隨鼠標(biāo)移動(dòng)。程序清單12-19TestMouseEvent.java6212-8為了處理一個(gè)在面板p上發(fā)生的鼠標(biāo)點(diǎn)擊事件,注冊(cè)處理器使用____________.p.setOnMouseClicked(handler);p.setOnMouseDragged(handler);p.setOnMouseReleased(handler);p.setOnMousePressed(handler);ABCD提交單選題1分12.6事件驅(qū)動(dòng)編程6312.6.1事件處理基本概念12.6.2事件委派和事件處理12.6.3示例:簡(jiǎn)易計(jì)算器12.6.4鼠標(biāo)事件12.6.5鍵盤事件12.6.5鍵盤事件在一個(gè)節(jié)點(diǎn)或一個(gè)場(chǎng)景上面只要按下、釋放或者敲擊鍵盤按鍵,就會(huì)觸發(fā)一個(gè)KeyEvent事件。事件注冊(cè)方法64用戶動(dòng)作事件注冊(cè)方法按下鍵setOnKeyPressed(EventHandler<KeyEvent>)釋放鍵setOnKeyReleased(EventHandler<KeyEvent>)敲擊鍵setOnKeyTyped(EventHandler<KeyEvent>)12.6.5鍵盤事件KeyEvent常用方法6566枚舉型KeyCode常量12.6.5鍵盤事件如何判斷哪個(gè)鍵被按下?12.6.5鍵盤事件67對(duì)于按下鍵和釋放鍵的事件:getCode

返回KeyCode中的常量getText

返回一個(gè)描述鍵的代碼的字符串getCharacter

返回一個(gè)空字符串對(duì)于敲擊鍵的事件:getCode

返回UNDEFINEDgetCharacter返回相應(yīng)的Unicode字符或和敲擊鍵相關(guān)的一個(gè)字符序列程序清單12-20TestKeyEvent.java6812-9為了處理一個(gè)在面板p上發(fā)生的鍵盤按下事件,注冊(cè)處理器使用____________.p.setOnKeyClicked(handler);p.setOnKeyTyped(handler);p.setOnKeyReleased(handler);p.setOnKeyPressed(handler);ABCD提交單選題1分思考如何設(shè)置一個(gè)焦點(diǎn)到結(jié)點(diǎn)上,使得它可以監(jiān)聽鍵盤事件?69一個(gè)結(jié)點(diǎn)只有獲得輸入焦點(diǎn),才可以接收鍵盤事件。獲得輸入焦點(diǎn)的途徑是結(jié)點(diǎn)對(duì)象調(diào)用requestFocus()方法。內(nèi)容7012.1JavaFX概述12.2JavaFX程序的結(jié)構(gòu)12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅(qū)動(dòng)編程12.7JavaFXUI控件12.7JavaFXUI控件7112.7.1標(biāo)簽12.7.2按鈕12.7.3按鈕綜合示例12.7.4文本框12.7.5文本區(qū)12.7.6組合框12.7.7列表視圖12.7.8表格視圖12.7.9菜單欄12.7.10圖表12.7.1標(biāo)簽Label72標(biāo)簽(label)是一個(gè)顯示小段文字、一個(gè)節(jié)點(diǎn)或同時(shí)顯示兩者的區(qū)域。它經(jīng)常用來給其他組件做標(biāo)簽。標(biāo)簽和按鈕共享許多共同的屬性。這些共同屬性定義在Labeled類中Labeled類定義了Label、Button、CheckBox、RadioButton的共同屬性12.7.1標(biāo)簽Label73程序清單12-21LabelDemo.java7412-10創(chuàng)建一個(gè)具有指定文本text的標(biāo)簽,使用__________.newLabelled();newLabel();newLabelled(text);newLabel(text);ABCD提交單選題1分7512-11在標(biāo)簽組件lbl中設(shè)置文本顏色為紅色,使用_________.lbl.setFill(Color.red);lbl.setTextFill(Color.red);lbl.setFill(Color.RED);lbl.setTextFill(Color.RED);ABCD提交單選題1分12.7JavaFXUI控件7612.7.1標(biāo)簽12.7.2按鈕12.7.3按鈕綜合示例12.7.4文本框12.7.5文本區(qū)12.7.6組合框12.7.7列表視圖12.7.8表格視圖12.7.9菜單欄12.7.10圖表12.7.2按鈕按鈕是單擊時(shí)觸發(fā)動(dòng)作事件的組件。JavaFX提供了常規(guī)按鈕,開關(guān)按鈕,復(fù)選框按鈕和單選按鈕。這些按鈕的公共特性在

ButtonBase和Labeled類中定義。77程序清單12-22ButtonSimpleDemo.javaCheckBox復(fù)選框用于提供給用戶進(jìn)行選擇。如同Button,CheckBox

繼承了來自ButtonBase和Labeled的所有屬性,如onAction,text,graphic,alignment,graphicTextGap,textFill,contentDisplay。另外,它提供了selected屬性用于表明一個(gè)復(fù)選框是否被選中。

784.復(fù)選鈕程序清單12-23CheckBoxDemo.java7912-12_________檢查一個(gè)復(fù)選框chk是否被選擇chk.getSelected()chk.selected()chk.isSelected().chk.select()ABCD提交單選題1分單選按鈕(RadioButton)單選按鈕也稱為選項(xiàng)按鈕,可讓用戶從一組選項(xiàng)中選擇一個(gè)單一的條目。單選按鈕是開關(guān)按鈕(ToggleButton)的子類。開關(guān)按鈕類似按鈕80程序清單12-24RadioButtonDemo.java8112-13_________檢查一個(gè)單選按鈕rb是否被選擇rb.getSelected()rb.selected()rb.isSelected().rb.select()ABCD提交單選題1分12.7JavaFXUI控件8212.7.1標(biāo)簽12.7.2按鈕12.7.3按鈕綜合示例12.7.4文本框12.7.5文本區(qū)12.7.6組合框12.7.7列表視圖12.7.8表格視圖12.7.9菜單欄12.7.10圖表12.7.3按鈕綜合示例一個(gè)綜合使用各種按鈕的示例,用戶界面左邊有一欄是單選按鈕和開關(guān)按鈕,中間是顯示的文本,右邊一欄是復(fù)選框按鈕,底部一欄是普通按鈕。程序代碼如程序清單12-25

AllButtonsDemo.java8312.7JavaFXUI控件8412.7.1標(biāo)簽12.7.2按鈕12.7.3按鈕綜合示例12.7.4文本框12.7.5文本區(qū)12.7.6組合框12.7.7列表視圖12.7.8表格視圖12.7.9菜單欄12.7.10圖表12.7.4

文本框文本框可用于輸入或顯示一個(gè)字符串。TextField

是TextInputControl的子類。提供了兩個(gè)構(gòu)造方法:1)publicTextField():無參構(gòu)造方法,創(chuàng)建一個(gè)空的TextField對(duì)象。2)publicTextField(Stringtext):創(chuàng)建一個(gè)具有指定初始文本的TextField對(duì)象。8512.7.4

文本框文本框可用于輸入或顯示一個(gè)字符串。TextField

是TextInputControl的子類。86程序清單12-26TextFieldDemo.java8712-14文本框tf的方法__________可以取得其內(nèi)容。tf.getText(s)tf.getText()tf.getString()tf.findString()ABCD提交單選題1分12.7JavaFXUI控件8812.7.1標(biāo)簽12.7.2按鈕12.7.3按鈕綜合示例12.7.4文本框12.7.5文本區(qū)12.7.6組合框12.7.7列表視圖12.7.8表格視圖12.7.9菜單欄12.7.10圖表12.7.5

文本區(qū)TextArea控件是用于顯示和編輯多行文本的GUI控件,其提供了一個(gè)可以輸入和展示多行文本的區(qū)域,并提供一系列屬性和方法來操作和管理文本內(nèi)容。89程序清單12-27TextAreaDemo9012-15TextAreata要折到下一行,需調(diào)用____________.ta.setLineWrap(false)ta.setLineWrap(true)ta.WrapLine()ta.wrapText()ABCD提交ta.setWrapText(true)E單選題1分12.7JavaFXUI控件9112.7.1標(biāo)簽12.7.2按鈕12.7.3按鈕綜合示例12.7.4文本框12.7.5文本區(qū)12.7.6組合框12.7.7列表視圖12.7.8表格視圖12.7.9菜單欄12.7.10圖表12.7.6

組合框組合框也稱為選擇列表框或下拉列表框,它包含一個(gè)條目列表,用戶可以下拉條滾動(dòng)從中選擇一個(gè)。列表框也可以設(shè)置為可編輯的,供用戶輸入信息。92程序清單12-28ComboBoxDemo.java9312-16在一個(gè)組合框中,多少項(xiàng)可以被添加進(jìn)來()?012無限ABCD提交單選題1分9412-17在組合框中,一次可有多少項(xiàng)被選擇?()012不限ABCD提交單選題1分9512-18_______________返回組合框cbo的選擇項(xiàng).cbo.getSelectedIndex()cbo.getSelectedItem()cbo.getSelectedIndices()cbo.getSelectedItems()ABCD提交cbo.getValue()E單選題1分9612-19方法__________往組合框cbo中增加一個(gè)選項(xiàng).cbo.add(s)cbo.addChoice(s)cbo.addItem(s)cbo.addObject(s)ABCD提交cbo.getItems().add(s)E單選題1分12.7JavaFXUI控件9712.7.1標(biāo)簽12.7.2按鈕12.7.3按鈕綜合示例12.7.4文本框12.7.5文本區(qū)12.7.6組合框12.7.7列表視圖12.7.8表格視圖12.7.9菜單欄12.7.10圖表12.7.7列表視圖ListView列表視圖(ListView)控件完成的功能與組合框控件基本相同,不同之處在于,列表視圖控件允許選擇多個(gè)值。ListView是一個(gè)泛型類,泛型T指定一個(gè)列表視圖中的元素的數(shù)據(jù)類型。98程序清單12-29ListViewDemo.java12.7.7列表視圖ListViewListView默認(rèn)情況下,選擇模式是單選的。getSelectionModel()方法返回一個(gè)selectionModel實(shí)例,該實(shí)例包含了設(shè)置選擇模式以及獲得被選中的索引值和選項(xiàng)的方法。選擇模式由以下兩個(gè)常量之一定義:SelectionMode.MULTIPLE,SelectionMode.SINGLE以下代碼創(chuàng)建一個(gè)具有5個(gè)選項(xiàng)的列表視圖:99ObservableList<String>items=FXCollections.observableArrayList(“item1”,“item2”,“item3”,“item4”,“item5”,“item6”);ListView<String>lv=newListView<>(items);lv.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);ObservableList<String>itemList=FXCollections.observableArrayList("選項(xiàng)1","選項(xiàng)2","選項(xiàng)3","選項(xiàng)4","選項(xiàng)5");ListView<String>lv=newListView<>(itemList);SelectionMode<String>sMode=lv.getSelectionModel();sMode.setSelectionMode(SelectinMode.MULTIPLE);12.7.7列表視圖ListViewListView事件處理代碼:列表視圖的選擇模式具有selectedItemProperty屬性,這個(gè)屬性是一個(gè)Observable的實(shí)例,可以在它上面添加一個(gè)監(jiān)聽器處理屬性的變化100lv.getSelectionModel().selectedItemProperty().addListener(newInvalidationListioner(){publicvoidinvalidated(Observableov){System.out.println("Selectedindices:"+lv.getSelectionModel().getSelectedIndices());}});lv.getSelectionModel().selectedItemProperty().addListener(ov->{System.out.println("Selectedindices:"+lv.getSelectionModel().getSelectedIndices());});程序清單12-29ListViewDemo.java10112-20用于注冊(cè)偵聽器以處理列表視圖項(xiàng)改變的語句是___________.lv.getItems().addListener(e->{processStatements});lv.addListener(e->{processStatements});lv.getSelectionModel().selectedItemProperty().addListener(e->{processStatements});lv.getSelectionModel().addListener(e->{processStatements});ABCD提交單選題1分12.7JavaFXUI控件10212.7.1標(biāo)簽12.7.2按鈕12.7.3按鈕綜合示例12.7.4文本框12.7.5文本區(qū)12.7.6組合框12.7.7列表視圖12.7.8表格視圖12.7.9菜單欄12.7.10圖表12.7.8表格視圖TableViewTableView控件可以按行顯示無限數(shù)量的數(shù)據(jù)記錄,這些數(shù)據(jù)可以分解為多個(gè)列。因此,TableView與ListView控件非常相似,其主要是增加了對(duì)列的支持。10312.7.8表格視圖TableViewTableView控件可以按行顯示無限數(shù)量的數(shù)據(jù)記錄,這些數(shù)據(jù)可以分解為多個(gè)列。因此,TableView與ListView控件非常相似,其主要是增加了對(duì)列的支持。104程序清單12-30TableView_demo.java12.7JavaFXUI控件10512.7.1標(biāo)簽12.7.2按鈕12.7.3按鈕綜合示例12.7.4文本框12.7.5文本區(qū)12.7.6組合框12.7.7列表視圖12.7.8表格視圖12.7.9菜單欄12.7.10圖表12.7.9菜單欄MenuBar106JavaFXMenuBar是一個(gè)功能強(qiáng)大的菜單欄控件,在JavaFX中通常用于創(chuàng)建應(yīng)用程序的菜單欄。MenuBar可以包含多個(gè)Menu,每個(gè)Menu可以包含多個(gè)MenuItem。MenuB

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論