JavaFX实现一个简单的模态窗口

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();
        }
}


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);
            }
    }
}




点击图片可运行程序,非模态时背景可以监听到鼠标事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值