<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    TWaver - 專注UI技術

    http://twaver.servasoft.com/
    posts - 171, comments - 191, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    TWaver With JavaFX

    Posted on 2012-09-26 10:38 TWaver 閱讀(1208) 評論(0)  編輯  收藏
    JavaFX Script被拋棄以后,很久不關心JavaFX了,偶然發現JavaFX已經發展到2.2,而且已經綁定到JDK7中,看來Oracle對它還是蠻重視的。 看到有人在論壇提問TWaver有沒有JavaFX版本,于是去Oracle網站上逛了一下,發現可以將JavaFX集成進Swing程序中,真是福音啊,立馬動手寫了個Demo,集成起來還是很方便的。
    運行效果

    代碼分析
    窗體中間是個很典型的Network,上下各是一個JavaFX容器,上面容器中包含一個Slider,滑動時可以改變TWaver選中Node的RenderColor,下面的容器中包含一些Text,選中Network中的Node并拖動的時候在Text組件上顯示Node的name和location。 在這個Demo里,程序架構還是Swing,JavaFX提供了一個名為JFXPanel的組件可以嵌入到Swing容器中,JFXPanel內可以放JavaFX的組件,需要注意,Swing和JavaFX的線程不同,官方的原文是:"JavaFX data should be accessed only on the JavaFX User thread","Swing data should be changed only on the EDT",所以如果要在Swing中修改JavaFX的數據,應該使用Platform#runLater包裝,本例中,拖動Node時修改JavaFX的Text組件的相關代碼:

     1 network.getDataBox().addElementPropertyChangeListener(new PropertyChangeListener() {
     2             @Override
     3             public void propertyChange(PropertyChangeEvent evt) {
     4                 if("location".equals(evt.getPropertyName())){
     5                     Element element= (Element) evt.getSource();
     6                     final String name=element.getName();
     7                     final double x=element.getX();
     8                     final double y=element.getY();
     9                     Platform.runLater(new Runnable() {
    10                         @Override
    11                         public void run() {
    12                             nameText.setText(name);
    13                             locationText.setText("X:"+x+"   Y:"+y);
    14                         }
    15                     });
    16                 }
    17             }
    18         });

    同樣,如果要在JavaFX中修改Swing數據,也要用SwingUtilities#invokeLater包裝,本例中,滑動Slider修改選中Node的Render Color代碼如下:

     1 slider.valueProperty().addListener(new ChangeListener<Number>() {
     2             public void changed(ObservableValue<? extends Number> ov,
     3                                 Number old_val,final Number new_val) {
     4                 SwingUtilities.invokeLater(new Runnable() {
     5                     @Override
     6                     public void run() {
     7                         Iterator it=network.getSelectionModel().selection();
     8                         while (it.hasNext()){
     9                             Element element= (Element) it.next();
    10                             element.putRenderColor(new java.awt.Color(new_val.intValue()));
    11                         }
    12                     }
    13                 });
    14             }
    15         });

    最后附上全部代碼:

      1 public class Test1 {
      2     static TNetwork network;
      3     static Text nameText;
      4     static Text locationText;
      5     static  Slider slider;
      6     private static void initAndShowGUI() {
      7         initNetwork();
      8         JFrame frame = new JFrame("TWaver With JavaFX");
      9         frame.getContentPane().setLayout(new BorderLayout());
     10 
     11         frame.setSize(500, 300);
     12         frame.setVisible(true);
     13         frame.getContentPane().add(network);
     14 
     15         final JFXPanel controlFXPanel = new JFXPanel();
     16         frame.add(controlFXPanel,BorderLayout.NORTH);
     17 
     18         final JFXPanel statusFXPanel = new JFXPanel();
     19         frame.add(statusFXPanel,BorderLayout.SOUTH);
     20 
     21         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     22         network.getDataBox().addElementPropertyChangeListener(new PropertyChangeListener() {
     23             @Override
     24             public void propertyChange(PropertyChangeEvent evt) {
     25                 if("location".equals(evt.getPropertyName())){
     26                     Element element= (Element) evt.getSource();
     27                     final String name=element.getName();
     28                     final double x=element.getX();
     29                     final double y=element.getY();
     30                     Platform.runLater(new Runnable() {
     31                         @Override
     32                         public void run() {
     33                             nameText.setText(name);
     34                             locationText.setText("X:"+x+"   Y:"+y);
     35                         }
     36                     });
     37                 }
     38             }
     39         });
     40         Platform.runLater(new Runnable() {
     41             @Override
     42             public void run() {
     43                 initFX(statusFXPanel,controlFXPanel);
     44             }
     45         });
     46     }
     47     private static void initNetwork(){
     48         network=new TNetwork();
     49         twaver.Node node1=new Node();
     50         node1.setName("node1");
     51         twaver.Node node2=new Node();
     52         node2.setLocation(200,100);
     53         node2.setName("node2");
     54         Link link=new Link(node1,node2);
     55         network.getDataBox().addElement(node1);
     56         network.getDataBox().addElement(node2);
     57         network.getDataBox().addElement(link);
     58 
     59     }
     60     private static void initFX(JFXPanel statusFXPanel,JFXPanel controlFXPanel) {
     61         Scene scene = createStatusScene();
     62         statusFXPanel.setScene(scene);
     63         statusFXPanel.validate();
     64 
     65         Scene controlScene=createControlScene();
     66         controlFXPanel.setScene(controlScene);
     67         controlFXPanel.validate();
     68 
     69     }
     70     private static Scene createControlScene(){
     71         Group  root  =  new  Group();
     72         Scene  scene  =  new  Scene(root, Color.ALICEBLUE);
     73         HBox hbox=new HBox();
     74         slider =new Slider(0,16777215,0);
     75         slider.setPrefHeight(30);
     76         slider.setPrefWidth(300);
     77         slider.valueProperty().addListener(new ChangeListener<Number>() {
     78             public void changed(ObservableValue<? extends Number> ov,
     79                                 Number old_val, final Number new_val) {
     80                 SwingUtilities.invokeLater(new Runnable() {
     81                     @Override
     82                     public void run() {
     83                         Iterator it = network.getSelectionModel().selection();
     84                         while (it.hasNext()) {
     85                             Element element = (Element) it.next();
     86                             element.putRenderColor(new java.awt.Color(new_val.intValue()));
     87                         }
     88                     }
     89                 });
     90             }
     91         });
     92         Label label=new Label("顏色:");
     93         label.setPrefHeight(30);
     94         hbox.getChildren().add(label);
     95         hbox.getChildren().add(slider);
     96         root.getChildren().add(hbox);
     97         return scene;
     98     }
     99     private static Scene createStatusScene() {
    100         Group  root  =  new  Group();
    101         Scene  scene  =  new  Scene(root, Color.ALICEBLUE);
    102         VBox vbox=new VBox();
    103         vbox.setPrefWidth(300);
    104         vbox.setPrefHeight(20);
    105         HBox hbox=new HBox();
    106         nameText=new Text();
    107         hbox.getChildren().add(new Label("  Name:"));
    108         hbox.getChildren().add(nameText);
    109         hbox.getChildren().add(new Text("   "));
    110         locationText=new Text();
    111         hbox.getChildren().add(new Label("Location:"));
    112         hbox.getChildren().add(locationText);
    113         vbox.getChildren().add(hbox);
    114         root.getChildren().add(vbox);
    115         return (scene);
    116     }
    117 
    118     public static void main(String[] args) {
    119         SwingUtilities.invokeLater(new Runnable() {
    120             @Override
    121             public void run() {
    122                 initAndShowGUI();
    123             }
    124         });
    125     }
    126 }

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 18女人水真多免费高清毛片| 亚洲黄网在线观看| 99久在线国内在线播放免费观看| 亚洲精品国产va在线观看蜜芽| 亚洲爆乳无码精品AAA片蜜桃| 在线观看成人免费视频| 亚洲精品成a人在线观看夫| 免费观看的av毛片的网站| 亚洲国产精品成人综合色在线| 在线免费观看污网站| 18禁亚洲深夜福利人口| 国产一级高清免费观看| eeuss在线兵区免费观看| 亚洲美女又黄又爽在线观看| 无码人妻丰满熟妇区免费| 亚洲精品第五页中文字幕| 国产成人免费高清激情明星| 亚洲午夜无码久久久久小说| 午夜一区二区免费视频| 国产精品成人亚洲| 亚洲一区二区三区无码中文字幕| 在线观看片免费人成视频无码 | 麻豆狠色伊人亚洲综合网站| 成人免费在线观看网站| 一级毛片免费全部播放| 久久久久亚洲AV成人无码网站 | 精品亚洲成A人在线观看青青| 亚洲国产一级在线观看| 无码人妻久久一区二区三区免费| 国产精品高清视亚洲精品| 亚洲AV无码一区二三区| 免费日本一区二区| 成人亚洲国产va天堂| 亚洲日韩中文无码久久| 免费AA片少妇人AA片直播| 美女被羞羞网站免费下载| 日韩va亚洲va欧洲va国产| 大学生美女毛片免费视频| 久久国产精品免费一区| 亚洲一区二区三区在线观看蜜桃| 亚洲高清无码专区视频|