JavaFX學習之道:JavaFX API具體解釋之Window,Stage,PopupWindow


stage包中包括
Window, Stage, PopupWindow, Popup, FileChooser, DirectoryChooser, Screen等類。



當中Window類可理解成一個窗口,用於存放Scene。並與用戶操作。一般window作為窗口。都用其子類Stage和PopupWindow。
看一下Window作為窗口的頂級類包括的一些共同屬性
eventDispatcher setEventDispatcher(EventDispatcher value)
focused: 焦點集中 setFocused(boolean)設置
x y width height: 位置及大小 setX(double)。setY(double),setWidth(double),setHeight(double) 設置
onCloseRequest 關閉Window事件 setOnCloseRequest(EventHandler)
onHidden 隱藏事件 setOnHidden(EventHandler)
onHiding 隱藏事件。優先於OnHidden setOnHiding(EventHandler)
onShowing 顯示事件 setOnShowing(EventHandler)
onShown 顯示事件,在OnShowing之后 setOnShown(EventHandler)
opacity 透明 setOpacity(double) 值為0到1
scene 設置場景 setScene(Scene)
showing 是否是顯示狀態 isShowing()

Window的一些方法:
addEventFilter(EventType eventType, EventHandler eventFilter) 加入事件過濾
removeEventFilter(EventType eventType, EventHandler eventFilter)
addEventHandler(EventType eventType, EventHandler eventHandler) 加入事件
removeEventHandler(EventType eventType, EventHandler eventHandler)
buildEventDispatchChain(EventDispatchChain tail)
centerOnScreen() 使Window顯示中間
hide() 隱藏 實際就是關閉
show() 保護類型 顯示window
requestFocus() 要求焦點集中
sizeToScene() 使Window的大小匹配它Scene的大小。假設你沒有設置Window大小的話,那么就是剛好匹配的(匹配不等於相等了,window始終要大Scene一些)。若果你設置了window大小。在調用該方法,則會改變window的大小以匹配Scene大小。

最好的樣例是,你設置window大小。而不設置Scene大小,再調用該方法。


fireEvent(Event event) 調用指定的事件

Stage作為頂級容器,其主Stage由系統創建。

額外的可由應用程序創建。
fullScreen 是否全屏。該屬性類型為ReadOnly,不可綁定。 setFullScreen(boolean) 盡管是全屏 可是width,height等屬性值仍不變。若在全屏的時候改變這些值。返回原來狀態的時候,使用改變后的值。


iconified 是否最小化 setIconified(boolean)
resizable 設置大小是否變化 setResizable(boolean) 為true則不能拉動stage的大小
title 設置標題
maxHeight maxWidth minHeight minWidth 設置最大最小高寬

stage的一些方法:
initModality(Modality modality) 設置stage的形態。依據功能來講就是窗體之間的堵塞模式,該方法不能被primaryStage調用,僅僅能被自己創建的stage調用。
Modality.NONE – a stage that does not block any other window.
不限制,父窗體與子窗體之間沒堵塞
Modality.WINDOW_MODAL – a stage that blocks input events from being delivered to all windows from its owner (parent) to its root. Its root is the closest ancestor window without an owner.
堵塞父窗體。也就是子窗體出現的時候,父窗體點擊不了。
Modality.APPLICATION_MODAL – a stage that blocks input events from being delivered to all windows from the same application, except for those from its child hierarchy.
這樣的為堵塞其他窗體,除了它的子窗體。

initStyle(StageStyle style) 設置樣式 設置樣式也能夠通過stage的構造函數設置
StageStyle.DECORATED – a stage with a solid white background and platform decorations.
一般的stage
StageStyle.UNDECORATED – a stage with a solid white background and no decorations.
白色背景,沒有修飾
StageStyle.TRANSPARENT – a stage with a transparent background and no decorations.
透明,沒有修飾
StageStyle.UTILITY – a stage with a solid white background and minimal platform decorations.
白色背景,僅一個關閉button

close() 關閉窗體 也就是調用父類的Hide()方法
initOwner(Window owner)指定所屬的window。就相當指定父窗體。
showAndWait()調用之后會堵塞在這里。直到被hidden或closed(被調用隱藏或關閉它),才會喚醒。繼續運行以下的代碼。 舉個樣例,假如我在代碼里面創建了2個stage。但是我想第一個stage關閉的時候才創建第二個。此時你就能夠在第一個stage創建完后調用showAndWait()方法。當第一個被隱藏或關閉時,才會繼續運行第二個stage的創建方法。
toBack() 實如今后端
toFront() 顯示在前端

PopupWindow作為頂級容器。但本身是抽象類。

其主要子類由Popup, 和 PopupControl。 而PopupControl並非直接使用的空間,而是其子類ContextMenu。Tooltip。

PopupWindow可理解成彈出層,子類Popup用於自己定義彈出層,ContextMenu。Tooltip為系統實現的彈出層。
PopupWindw和stage不同,它沒有窗口的修飾。沒有標題欄,而且不會作為頂級容器直接在操作系統上顯示(一般都在stage上顯示)。一般用於提醒,可移動的Box等。


看一下PopupWindow作為彈出框的頂級類所包括的一些共同屬性:
autoFix
autoHide 自己主動隱藏,setAutoHide(boolean) 默認值為true。在焦點失去的時候會隱藏(但是什么顯示卻沒有)。
consumeAutoHidingEvents 是否在隱藏的時候消費掉事件。 setConsumeAutoHidingEvents(boolean) 也就是說調用完隱藏事件后,就消耗掉事件。不再往下傳遞,避免Popup的UI控件觸發事件。舉個樣例假如你失去焦點時,PopupWindow的autoHide事件觸發。同一時候PopupWindow的一個UI控件也觸發了這個事件,此時設置consumeAutoHidingEvents為true,由於會首先調用autoHide事件。而且把這個響應事件消耗了,所以那個UI控件的事件就不會被處理了。
hideOnEscape 這個就是你按esc的時候PopupWindow是否隱藏,setHideOnEscape(boolean)
onAutoHide 自己主動隱藏處理事件, setOnAutoHide(EventHandler) 。

在它本身的隱藏事件后調用。


ownerNode,ownerWindow 所屬的節點和窗體,僅僅讀對象。

PopupWindow顯示必須指定其擁有者,所以就有該屬性。
能夠看它的show方法,owner能夠是window,也能夠是Node
show(Window owner)
show(Window ownerWindow, double screenX, double screenY)
show(Node ownerNode, double screenX, double screenY)
顯示在該節點右側:
double screenX = button.getScene().getWindow().getX() + button.getScene().getX() + button.localToScene(0, 0).getX(); 這里計算出button位於Screen中的位置,然后僅僅須要加上Button的寬度。
double width = button.getBoundsInParent().getWidth(); 由於BoundsInParent包括button的effect效果占的位置,所以用這個比button.getWidth()好。
僅僅要確定了button在Screen中的位置,然后PopWindow想位於button的哪里就好計算了。
button.localToScene(0, 0) 當中有二個參數,這是指Node自身以那個點作為坐標點。 舉例:button以左上方點0,0作為位置計算的點,所以參數是0,0。假若是circle,則參數是circle.centerX,circle.centerY。由於circle是以中心點作為坐標點。
獲取owner
getOwnerWindow()
getOwnerNode()

再看一下PopupWindow中一些方法:
hide() 隱藏。
setScene(Scene scene) 設置scene,保護類型。PopupWindow已經創建了Scene,並指定了根節點。
getContent() 保護類型,獲取根節點的ChildrenList。


看一下getContent的源代碼
protected ObservableList getContent() {
final Parent rootNode = getScene().getRoot();
if (!(rootNode instanceof Group)) {
throw new IllegalStateException(
“The content of the Popup can’t be accessed”);
}

return ((Group) rootNode).getChildren();
}
不難發現根節點就是Group。

一般我們要開發PopupWindow,直接使用它的子類Popup。
Popup中就一個getContent() 方法,看它的源代碼。就是調用了PopupWindow的getContent方法。


public final ObservableList getContent() {
return super.getContent();
}

當中有些方法,沒使用過,理解有點模糊,就沒寫。知道的大家評論下。互相學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM