ITPub博客

首页 > Linux操作系统 > Linux操作系统 > JavaFX发现之旅(2):JavaFX Script With Eclipse 入门

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

原创 Linux操作系统 作者:梧桐雨—168 时间:2008-03-19 08:34:02 0 删除 编辑

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

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

边框和布局管理器

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

import javafx.ui.*; class ButtonClickModel { attribute numClicks: Number;} var model = new ButtonClickModel(); var win = Frame {   width: 300   height:200   content: GridPanel {     border: EmptyBorder {  top: 30  left: 30  bottom: 30  right: 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: {model.numClicks}"      }]  }   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; class ButtonClickModel { attribute numClicks: Number;} var model = new ButtonClickModel(); 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: 30  left: 30  bottom: 30  right: 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: {model.numClicks}"      }]  }   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代码来直接退出应用的操作。

13270562_200803190835091.jpg

13270562_200803190835092.jpg

13270562_200803190835093.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13270562/viewspace-211609/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-28

  • 博文量
    141
  • 访问量
    402090