JavaFX实现一个简单的模态窗口
来源:互联网 发布:windows phone 10应用 编辑:程序博客网 时间:2024/06/05 06:51
JavaFX直到目前最新的1.2.1版本里没有提供模态窗口或着对话框,我在项目里通过扩展Control自己实现了一个简单的模态窗口,控件由2个类Window.fx和WindowSkin.fx组成,在WindowSkin里实现了Skin的抽象方法contains,在模态下始终返回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();
}
}
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);
}
}
}
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);
}
}
}
点击图片可运行程序,非模态时背景可以监听到鼠标事件。
- JavaFX实现一个简单的模态窗口
- JavaFX如何实现模态窗口
- javafx模态窗口
- 一个简单窗口的实现
- JavaFX制作一个简单的时钟
- JavaFx - 窗口的标题栏
- 一个简单的窗口
- JavaFX环境的搭建和一个简单的例子
- 一个简单的四个窗口售百张票的线程实现
- 用JAVA实现一个简单的登陆窗口
- 一个简单的汇编窗口
- javafx如何实现模态/模式对话框
- 一个javafx初学者实现国际象棋简单方法(很粗暴)棋子实现不再提供 没有使用java编程思想用的很基础的c语言思想
- javaFX的一些简单类
- 使用JavaFX设置一个简单日历
- Javafx FXMLLoader的一个坑
- javaFx 2.0 中弹出新窗口的解决办法
- javafx实现上一步,下一步的控制窗口(用stackpane)
- jsp url传中文最简单正确的方法
- LAZARUS
- 因為 Google 天下少了許多新鮮事
- 如果配置IIS支持WAP
- WinSock Expert v0.6 beta1
- JavaFX实现一个简单的模态窗口
- QQ用户的帐号和密码安全
- PUBWIN4
- 查看Oracle字符集及怎样修改字符集(zt)
- Oracle字符集测试
- 过来看看
- THE BEGINNING OF CENTOS
- 80后你能做到这些就算成熟了…………
- 成为黑客不是梦