JavaFX直到目前最新的1.2.1版本里沒有提供模態(tài)窗口或著對話框,我在項目里通過擴展Control自己實現(xiàn)了一個簡單的模態(tài)窗口,控件由2個類Window.fx和WindowSkin.fx組成,在WindowSkin里實現(xiàn)了Skin的
抽象方法contains,在模態(tài)下始終返回true。
下面是控件的源碼和一個演示demo。
Window.fx
package org.jqueen.fx.scene.control;
import javafx.scene.Node;
import javafx.scene.image.Image;
import javafx.scene.control.Control;
/**
* @author Leon Chen
*/
public class Window extends Control {
public var modal: Boolean;
public var background: Image;
public var content: Node[];
override protected function create(): Node {
skin = WindowSkin {};
super.create();
}
}
WindowSkin.fx
package org.jqueen.fx.scene.control;
import javafx.scene.control.Skin;
import javafx.scene.Group;
import javafx.scene.image.ImageView;
/**
* @author Leon Chen
*/
package class WindowSkin extends Skin {
def windowControl = bind control as Window;
def bounds : Bounds = bind windowControl.boundsInLocal;
def background = ImageView {
image: bind windowControl.background
};
def content = bind windowControl.content;
init {
node = Group {
content: bind[background, content]
}
}
override public function intersects(localX: Number, localY: Number, localWidth: Number, localHeight: Number): Boolean {
return bounds.intersects(localX, localY, localWidth, localHeight);
}
override public function contains(localX: Number, localY: Number): Boolean {
if (windowControl.modal) {
return true;
} else {
return bounds.contains(localX, localY);
}
}
}
點擊圖片可運行程序,非模態(tài)時背景可以監(jiān)聽到鼠標事件。