Java程序設計基礎 課件 第12章 JavaFX圖形用戶界面程序設計_第1頁
Java程序設計基礎 課件 第12章 JavaFX圖形用戶界面程序設計_第2頁
Java程序設計基礎 課件 第12章 JavaFX圖形用戶界面程序設計_第3頁
Java程序設計基礎 課件 第12章 JavaFX圖形用戶界面程序設計_第4頁
Java程序設計基礎 課件 第12章 JavaFX圖形用戶界面程序設計_第5頁
已閱讀5頁,還剩114頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第12章JavaFX圖形用戶界面程序設計1教學目標(1) 區分JavaFX、Swing和AWT(2) 理解舞臺、場景和節點間的關系(3) 使用GridPane、BorderPane、TitledPane、HBox和Vbox等實現界面布局(4) 了解節點的通用屬性style(5) 使用Color類創建顏色(6) 使用Font創建字體(7) 使用Image類創建圖形以及使用ImageView創建圖形視圖2教學目標(8) 理解事件、事件源以及事件類(9) 定義處理器類、注冊處理器對象以及編寫處理器代碼(10)使用內部類、匿名類和lambda表達式進行事件處理(11)使用Button類創建具有文本和圖形的按鈕,并設置處理器(12)使用TableView顯示數據記錄集(13)實用菜單欄組件,設置菜單項3內容412.1JavaFX概述12.2JavaFX程序的結構12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅動編程12.7JavaFXUI控件內容512.1JavaFX概述12.2JavaFX程序的結構12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅動編程12.7JavaFXUI控件12.1JavaFX概述AWT(AbstractWindowToolkit):抽象窗體工具包Swing:更少依賴于目標平臺,且使用更少的本地資源JavaFX:融入了現代GUI技術以方便開發富因特網應用。支持無縫地在桌面或web瀏覽器中運行支持FXML腳本,類似于HTML編寫Web圖形用戶界面為觸摸設備提供多點觸控支持,如平板和智能手機具有內建的2D、3D、動畫支持,以及視頻、音頻播放功能JDK7開始成為Java平臺一部分Java11從JDK中刪除,需單獨下載和安裝。仍與Java密切相關,支持與Swing、Spring等的集成。6內容712.1JavaFX概述12.2JavaFX程序的結構12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅動編程12.7JavaFXUI控件12.2JavaFX程序的基本結構8為了創建一個基本的JavaFX應用程序,需擴展javafx.application.Application,并重寫start()方法。launch方法是JavaFX程序的啟動方法,該方法是Application類中的靜態方法。從命令行運行JavaFx程序,main()方法不是必需的從一個不完全支持JavaFx的IDE啟動JavaFx程序,main()方法可能是需要的運行一個無main()方法的JavaFx應用程序,launch方法自動被JVM調用示例:程序清單12-1FirstJavaFX.java12.2JavaFX程序的基本結構9Stage(舞臺):表示一個窗口,是所有JavaFx對象的容器每個JavaFx程序至少有一個主窗口即主舞臺,由JVM自動創建,以實參傳遞給start方法一個JavaFx程序可創建多個舞臺,程序清單12-2SecondJavaFX.javaScene(場景):包含所有物理內容(節點)通常,所有待顯示對象放入場景對象中Stage的方法setScene,用于設置場景SceneGraph(場景圖):不是一個具體類所有節點的集合場景圖內的節點以樹狀結構進行組織,總有一個根節點通常,JavaFx程序使用某種布局面板作為根節點,其他節點作為子節點StageSceneSceneGraph根節點分支節點葉子節點葉子節點葉子節點12.2JavaFX程序的基本結構10JavaFX類體系12-1每個JavaFX主類__________.implementsjavafx.application.Applicationextendsjavafx.application.Application重寫start(Stages)方法重寫start()方法ABCD提交多選題1分12-2以下哪項陳述是正確的?啟動JavaFX主類時會自動創建一個主stage。可以在JavaFX程序中顯示多個stage。通過調用stage的show()方法來顯示stage。使用addScene方法將場景放置在stage中ABCD提交使用setScene方法將場景放置在stage上E多選題1分內容1312.1JavaFX概述12.2JavaFX程序的結構12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅動編程12.7JavaFXUI控件12.3屬性綁定14JavaFX引入了一個稱為屬性綁定的新概念,可以將一個目標對象和一個源對象綁定。如果源對象中的值改變了,目標對象也將自動改變。綁定對象(綁定屬性):目標對象可綁定對象(可觀察對象):源對象目標對象tObj采用bind方法和源對象sObj進行綁定:tObj.bind(sObj);bind方法在perty.Property接口中定義。目標對象是javafx.Bperty.Property的一個實例,許多JavaFX類(面板、節點等)的屬性都是Property的實例。源對象是javafx.beans.value.ObservableValue接口的一個實例。ObservableValue實例是一個包裝了值的實體,允許值發生改變時被觀察到。12.3屬性綁定15JavaFX為基本數據類型和字符串定義綁定屬性。double,float,long,int,boolean,String對應綁定屬性(抽象類):DoubleProperty,FloatProperty,LongProperty,IntegerProperty,BooleanProperty,StringProperty具體子類屬性前加Simple,如:SimpleDoublePropertyJavaFX類中的每個綁定屬性都有一個獲取方法和設置方法用于返回和設置屬性的值。同時還有一個獲取方法返回屬性本身。例如,Circle的屬性centerX:值的獲取方法:getCenterX()值的設置方法:setCenterX(double)屬性的獲取方法:centerXProperty()程序清單12-3PropertyBindDemo.java12.3屬性綁定16內容1712.1JavaFX概述12.2JavaFX程序的結構12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅動編程12.7JavaFXUI控件12.4布局面板和組18面板:組織、定位、布局其內部節點的容器javafx.scene.layout.Pane是這些類的基類類說明Pane面板類的基類,以getChiledren()返回內部節點列表HBox單行水平布局內部節點VBox單列垂直布局內部節點StackPane居中,以堆棧式放置所有內部節點BorderPane面板劃分為頂部、底部、左側、右側和中間區域,用于分區域放置節點FlowPane以水平或垂直往復折返式放置節點GridPane內部節點以網格式布局12.4布局面板和組javafx.scene.Group用于將節點組成一個邏輯組來進行轉換或縮放。例如,下面的代碼通過一個循環將5個矩形添加到Group對象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面板是所有面板類的基類,它對其中的節點對象的顯示次序不施加任何的控制Pane面板調整自己的大小以適應其內容示例:程序清單12-4PaneDemo.java在往面板對象中增加節點時,需要先調用方法getChildren(),返回一個列表對象,再調用add或addAll方法,往列表中增加節點頂部面板左邊底部右邊Insets:頂、右、底、左vGap垂直間距hGap水平間距12-3下列說法哪個是正確的?()一個Node可以放置在一個Pane中一個Node可以放置到一個Scene中一個Pane可以放置到一個Control中一個Shape可以放置到一個Control中ABCD提交單選題1分12-4將一個circle對象加入到一個面板中,使用()pane.add(circle);pane.addAll(circle);pane.getChildren().add(circle);pane.getChildren().addAll(circle);ABCD提交多選題1分12.4.2StackPane面板23StackPane將其節點依次疊加在另一個上,最后添加的節點位于最上面。默認情況下,StackPane將設置為Pos.CENTER,指定節點居中對齊構造方法:(1)publicStackPane():創建一個StackPane對象,默認使用Pos.Center對齊方式。(2)publicStackPane(Node...children):創建一個StackPane對象,默認使用Pos.Center對齊方式,可以添加不定數量的節點對象。示例:程序清單12-5StackPaneDemo.java12.4.3FlowPane面板24FlowPane按照節點加入的次序,從左到右或從上到下布局。當一行或一列排滿遇到容器的邊界時,則折返,開始新的一行或一列。枚舉常量Orientation.HORIZONTAL或者Orientation.VERTICAL可確定FlowPane內部節點是按水平還是按垂直排列的。通過alignment設置FlowPane內部節點的對齊方式,通過hgap和vgap設置節點左右或上下間距。示例:程序清單12-6FlowPaneDemo.java12.4.4GridPane面板25GridPane面板,用于對內部節點按行和列對齊的樣式進行布局。GridPane也可以采用讓一個節點跨越多個網格,實現更復雜的布局。GridPane僅提供了一個構造方法:publicGridPane(),創建一個水平/垂直間距為0并且對齊方式為TOP_LEFT的GridPane對象。示例:程序清單12-7GridPaneDemo.java12.4.4GridPane面板2612.4.4GridPane面板272812-5在一個GridPane面板中,將一個結點加到第一行,第二列,使用________.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以垂直列的形式排列其內部節點;HBox以水平行的方式排列節點。構造方法1)publicVBox\HBox():無參構造方法,創建一個空的VBox\HBox對象。2)publicVBox\HBox(doublespacing):使用指定的間距創建一個VBox\HBox對象,并設置節點之間的垂直水平間距。3)publicVBox\HBox(Node…children):創建一個VBox\HBox對象,并將指定的節點添加進來,默認的間距為0。4)publicVBox\HBox(doublespacing,Node…children):使用指定的間距創建一個VBox\HBox對象,并將指定的節點添加進來。示例:程序清單12-8VBox_HBoxDemo.java3012-6將兩個結點node1、node2放置到一個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將節點放置在五個區域,各區域默認對齊方式如下:1)Top區域:Pos.TOP_LEFT2)Bottom區域:Pos.BOTTOM_LEFT3)Left區域:Pos.TOP_LEFT4)Right區域:Pos.TOP_RIGHT5)Center區域:Pos.CENTER構造方法:publicBorderPane():默認構造方法,創建一個沒有任何子節點的BorderPane對象。publicBorderPane(Nodecenter):創建一個BorderPane對象,并指定中間的子節點。publicBorderPane(Nodecenter,Nodetop,Noderight,Nodebottom,Nodeleft):創建一個BorderPane對象,并指定中間、頂部、右邊、底部、左邊和中間的節點。示例:程序清單12-9BorderPaneDemo.java內容3212.1JavaFX概述12.2JavaFX程序的結構12.3屬性綁定12.4布局面板和組12.5Node類12.6事件驅動編程12.7JavaFXUI控件12.5Node節點33Node:是添加到場景圖中所有組件的基類。最常用的屬性:樣式styleJavaFX的樣式屬性類似于Web頁面中指定HTML元素樣式的CSS。因此JavaFX的樣式屬性也稱為JavaFXCSS。設定樣式的語法是styleName:value,多個樣式可通過分號(;)分隔,例如:circle.setStyle("-fx-stroke:black;-fx-fill:blue");變換Transformation:一組屬性變換,對節點進行平移、旋轉、縮放或者剪切平移指沿著坐標系的x軸或y軸移動節點旋轉變換是指圍繞指定的“中心”點旋轉節點的坐標空間,使節點看起來像旋轉縮放變換會導致節點根據縮放因子放大或縮小剪切變換,也稱為扭曲,是指通過剪切因子指定節點在x和y軸方向上的傾斜程度。示例:button.setRotate(30);//把一個按鈕順時針旋轉30度3412-7節點對象設定樣式的語法是

[填空1]

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

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

返回KeyCode中的常量getText

返回一個描述鍵的代碼的字符串getCharacter

返回一個空字符串對于敲擊鍵的事件:getCode

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論