JavaFX发现之旅(2):JavaFX Script With Eclipse 入门

ZDNet软件频道 时间:2008-08-02 作者: |  我要评论(1)
本文关键词:发现之旅 JavaFX 软件
接第一部分,本章将讨论目前JavaFX语言可用的各种GUI组件并且给出一些如何使用的示例。我们会同时对比Swing的GUI组件进行讨论。

接第一部分,本章将讨论目前JavaFX语言可用的各种GUI组件并且给出一些如何使用的示例。我们会同时对比Swing的GUI组件进行讨论。

我们将分四个章节完成GUI组件的讲解,本章要阐述的GUI组件如下:

边框和布局管理器
菜单
标签
边框和布局管理器

JavaFX语言中,边框和布局管理器的使用同样也是声明性的。每个Swing/AWT布局管理器都被封装为一个JavaFX类,该类使用特定的布局管理器实例化一个JPanel。组件通过声明的方式使用JavaFX类提供的属性被添加到(底部的)JPanel上。每个Swing边框类型也被封装成一个属性对应与边框的配置选项的JavaFX类。以下是一个使用EmptyBorder和GridPanel的简单示例。和您猜想的一样,EmptyBorder对应于javax.swing.border.EmptyBorder,而GridPanel与java.awt.GridLayout一致。

import JavaFX.ui.*;classButtonClickModel{attribute numClicks:Number;}var model =newButtonClickModel(); var win =Frame{   width:300   height:200   content: GridPanel{     border:EmptyBorder{top:30left:30bottom:30right:30     }     rows:2     columns:1     vgap:10     cells:    [Button{      text:"I'm a button!"      mnemonic: I      action: operation(){        model.numClicks++;       }      },     Label{        text: bind"Number of button clicks: "      }]  }   visible:true};运行程序显示如下:

 

点击按钮三次后显示如下:

 

注意:Button的action和mnemonic属性将在后面讨论...

在该示例中,通过给GridPanel的columns、rows和vgap属性赋值,GridPanel被配置为一列、两行以及行间垂直间距10像素, 如果您想在列间增加间距,GridPanel还有一个hgap属性。GridPanel的四周的被设置为30个像素大小的空边框。

按钮和标签通过将指派给cells属性来添加到面板中。GridPanel通过在其底部的JPanel添加或删除组件来实现对它的cells属性的插入或删除。

JavaFX支持的其他布局管理器原理与此类似,以下表格是这些布局管理器的概述:

 
JavaFX Widget Layout Manager
GridPanel GridLayout
GridBagPanel GridBagLayout
FlowPanel FlowLayout
BorderPanel BorderLayout
Box BoxLayout
StackPanel Romain Guy's StackLayout
CardPanel CardLayout
GroupPanel org.jdesktop.layout.GroupLayout

下面是JavaFX边框类和其对应Swing边框类的概述:

 
JavaFX Border Swing Border
EmptyBorder EmptyBorder
LineBorder LineBorder
BevelBorder BevelBorder
SoftBevelBorder SoftBevelBorder
MatteBorder MatteBorder
TitledBorder TitledBorder

菜单

让我们在前面的示例中加入简单的菜单,新的代码如下:

import JavaFX.ui.*;import java.lang.System;classButtonClickModel{attribute numClicks:Number;}var model =newButtonClickModel(); var win =Frame{   width:300   height:200   menubar:MenuBar{     menus:Menu{       text:"File"       mnemonic: F       items:MenuItem{         text:"Exit"         mnemonic: X         accelerator:{           modifier: ALT           keyStroke: F4           }         action: operation(){          System.exit(0);           }        }      }   }   content: GridPanel{     border:EmptyBorder{top:30left:30bottom:30right:30     }     rows:2     columns:1     vgap:10     cells:    [Button{      text:"I'm a button!"      mnemonic: I      action: operation(){        model.numClicks++;       }      },     Label{        text: bind"Number of button clicks: "      }]  }   visible:true};运行后,按Alt+F键,显示如下:

 

正如您所见的,菜单栏通过给窗口的menubar属性赋值一个MenuBar类的新示例而创建。您通过将菜单指定给菜单栏的menus属性来将它们添加到菜单栏中。在该示例中,只添加了一个菜单,但是任何返回Menu对象列表的表达式都可以被使用。

要定义菜单,它的的text、mnemonic和items属性值必须被设定。

您可能已经猜到,text属性的类型是String,而mnemonic属性是KeyStroke类型,它的值F是KeyStroke类的一个枚举实例。在JavaFX中,属性初始化属性的静态类型(和Java中的静态字段情况)的枚举值时可以不使用规范类别名直接访问(其他地方您必须使用F:KeyStroke替代F)。

一个菜单条目,一个text为“Exit“及其mnemonic为X的MenuItem被创建。它accelerator属性同样被赋了值。注意,在声明中值类型名Accelerator被省略了,这是允许的。如果没有指定类型名,将使用属性的静态类型,在示例中是Accelerator。此外,accelerator的modifier和keyStroke被初始化使用枚举值。

最后,MenuItem的action属性为function类型(例如,它是一个函数,而不是一个对象),在示例中,是一行通过调用某些已经编写的Java代码来直接退出应用的操作。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134