鍵盤上的舞者

          像寫情書一樣Coding...
          隨筆 - 20, 文章 - 0, 評(píng)論 - 15, 引用 - 0
          數(shù)據(jù)加載中……

          JavaFX實(shí)現(xiàn)一個(gè)簡單的模態(tài)窗口

          JavaFX直到目前最新的1.2.1版本里沒有提供模態(tài)窗口或著對(duì)話框,我在項(xiàng)目里通過擴(kuò)展Control自己實(shí)現(xiàn)了一個(gè)簡單的模態(tài)窗口,控件由2個(gè)類Window.fx和WindowSkin.fx組成,在WindowSkin里實(shí)現(xiàn)了Skin的抽象方法contains,在模態(tài)下始終返回true。

          下面是控件的源碼和一個(gè)演示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);
                      }
              }
          }



          點(diǎn)擊圖片可運(yùn)行程序,非模態(tài)時(shí)背景可以監(jiān)聽到鼠標(biāo)事件。

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

          主站蜘蛛池模板: 大余县| 麦盖提县| 射阳县| 越西县| 桐城市| 汾阳市| 肥西县| 廉江市| 巴南区| 弥渡县| 长泰县| 平塘县| 广南县| 湛江市| 龙口市| 宁化县| 大同市| 广安市| 潼南县| 莱阳市| 南皮县| 安化县| 沅江市| 阜新| 南昌市| 南漳县| 阳高县| 随州市| 阿拉尔市| 璧山县| 瓮安县| 五峰| 大兴区| 周口市| 姚安县| 渝中区| 四会市| 保山市| 贺州市| 定兴县| 辽阳市|