鍵盤上的舞者

          像寫情書一樣Coding...
          隨筆 - 20, 文章 - 0, 評論 - 15, 引用 - 0
          數據加載中……

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



          點擊圖片可運行程序,非模態時背景可以監聽到鼠標事件。

          posted on 2009-12-19 02:45 陳維 閱讀(1958) 評論(0)  編輯  收藏 所屬分類: JavaFX

          主站蜘蛛池模板: 常熟市| 益阳市| 泽普县| 新平| 莲花县| 焉耆| 霍城县| 通化市| 永丰县| 天台县| 宿州市| 渭源县| 凤山县| 治县。| 黑山县| 东城区| 临沧市| 东兰县| 搜索| 祁东县| 阿瓦提县| 泌阳县| 辽阳县| 崇义县| 萨嘎县| 广东省| 贵阳市| 杂多县| 泗洪县| 清涧县| 山东| 扬州市| 信阳市| 武宣县| 永川市| 永城市| 乌海市| 晋中市| 平昌县| 龙门县| 七台河市|