鍵盤上的舞者

          像寫情書一樣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 陳維 閱讀(1963) 評論(0)  編輯  收藏 所屬分類: JavaFX

          主站蜘蛛池模板: 文昌市| 绥化市| 凌源市| 吴川市| 平安县| 会泽县| 古田县| 永城市| 青铜峡市| 故城县| 伊春市| 锦州市| 琼结县| 山阳县| 清原| 昭觉县| 云龙县| 合江县| 新安县| 禹城市| 乌兰察布市| 称多县| 迁西县| 昌都县| 长沙市| 淮滨县| 建阳市| 新龙县| 镇江市| 紫阳县| 许昌市| 皮山县| 天台县| 得荣县| 堆龙德庆县| 泾川县| 朝阳区| 中宁县| 革吉县| 青海省| 北辰区|