JavaFX ç”׃¸€¾pÕdˆ—产哾l„æˆåQŒç”¨äºŽåˆ›å»ºåŒ…å«å¤§é‡åª’体和内容的富 Internet 应用½E‹åºã€‚它包括 runtime å’Œå·¥å…øP¼Œå¯ä¾› Web 脚本¾~–写者ã€è®¾è®¡è€…和开å‘者用æ¥äؓ桌é¢ã€ç§»åŠ¨è®¾å¤‡ã€TV 和其他åã^å°æž„建和æä¾›äº¤äº’å¼åº”用程åºã€?/p>
JavaFX runtime ä¸?Java ä¸‹è²æ–‡äšg集æˆåœ¨ä¸€èµ—÷€‚当用户安装 Java 6 update10 (jre6u10) æ—Óž¼ŒåŒæ—¶ä¹Ÿå°†å®‰è£… JavaFX runtime。当 Java å®‰è£…å®Œæˆæ—Óž¼ŒJavaFX 的安装也éšä¹‹å®Œæˆã€?/p>
下é¢çš„æ¥éª¤ç”¨äºŽéªŒè¯æ˜¯å¦æˆåŠŸå®‰è£…äº† JavaFX runtimeã€?/p>
½W¬äºŒä¸ªç»„ä»? JavaFX MobileåQŒæ˜¯ä¸ºç§»åŠ¨è®¾å¤‡å¼€å‘Java应用的åã^å°ã€‚它最¾lˆä¼šæˆäؓ开å?JavaFX 脚本的åã^åîC½†æ˜¯çŽ°åœ¨åŒ˜q™ç¯‡æ–‡ç« 实用的技术还很ä¸å…¼å®¹ã€?/p>
在开始å¦ä¹ 一门新的è¯a€å‰ï¼Œè®©æˆ‘们先看一ä¸?/span>JavaFX代ç 的一些例åã€?/span>JavaFX 官方站点å…ähœ‰å¤§é‡çš?/span>JavaFX 实例。请点击JavaFX
Script 2D Graphics
Tutorial下è²è¯¥å®žä¾?/span>. 下è²å®Œæˆä»¥åŽåQŒåŒå‡?/span>tutorial.jnlp æ–‡äšgå›_¯˜qè¡Œã€‚å‡ ¿U’过åŽï¼Œä½ 应该能够看到如图一çš?/span>JavaFX实例˜q行场景åQˆè‹¥æ²¡æœ‰å‡ºçŽ°è¯¥å›¾ç‰‡ï¼Œä½ å¿…™åÖMØ“.jnlp扩展å釿–°é…¾|?/span>Java
Web StartåQ‰ã€?/span>
图一ã€è¿è¡?/span> tutorial.jnlp tutorial
èŠ×ƒº›æ—‰™—´çœ‹ä¸€çœ‹è¿™äº›ä¾‹åå’Œæºä»£ç 。仅仅ä‹É用有é™çš„å‡ è¡ŒJavaFXä»£ç ž®Þpƒ½å¾—åˆ°å¾ˆå¤šæœ‰è¶£çš„æ•ˆæžœã€‚å¦‚æžœä½ å¯¹äºŽJavaFX的应用还是感到摸ä¸ç€å¤´è„‘åQŒçœ‹ä¸€çœ‹ä¸‹é¢çš„两个demo。它们是StudioMoto å’?/span> Tesla Motors ç«™ç‚¹çš„éƒ¨åˆ†é‡æ–°å®žçŽ°ã€‚æ‚¨å¯ä»¥ä»?/span>OpenJFX ™å¹ç›®ç«™ç‚¹ä¸‹è²OpenJFX 脚本Studiomoto Demo å’?/span> Tesla Demo。它们需è¦?/span>Java Web Start æ‰èƒ½˜q行åQŒä½†æ˜¯ä¹Ÿå–å†³äºŽä½ çš„æœºå™¨é…¾|®å®ƒä»¬å¯èƒ½è‡ªåЍè¿è¡Œï¼Œæˆ–è€…ä½ å¿…é¡»æ‰‘Öˆ°å’Œè¿è¡Œå·²¾l下载的.jnlpæ–‡äšgã€?/span>
下è²å®‰è£…JavaFX
å¦‚æžœä½ å¯¹äºŽå¦ä¹ å¼€å?/span>JavaFX应用½E‹åºåQŒæ‚¨åº”该了解臛_°‘使用JavaFX三个æ–ÒŽ³•ã€‚åŒæ—¶äº†è§?/span>JavaFX应用½E‹åºä¸æ˜¯åŸÞZºŽ‹¹è§ˆå™¨çš„也很é‡è¦ã€‚最½Ž€å•最快æ·çš„æ–¹æ³•是åŸÞZºŽå?/span>JavaFXPad轻釾U§çš„工具。ä‹É用该工具的主è¦ä¼˜åŠ¿æ˜¯ä½ æ€»èƒ½ç«‹å³çœ‹åˆ°ä½ 在¾~–è¾‘å™¨é‡Œæ‰€ä½œæ›´æ”¹çš„æ•ˆæžœã€‚ä½ èƒ½ä»ŽJavaFX™å¹ç›®¾|‘站下è²åˆ°è¯¥å·¥å…·åQ?/span> JavaFXPad åQ‰ã€‚åÆˆä¸”è¿è¡Œå®ƒéœ€è¦?/span>Java Web Start åQˆå¦‚图二åQ‰ã€?/span>
图二ã€è¿è¡?/span>JavaFXPad¾~–辑å™?/span>
使用JavaFXçš„å¦ä¸€¿Uæ–¹å¼æ˜¯ä½¿ç”¨JavaFX脚本NetBeans
5.5æ’äšg(https://openjfx.dev.java.net/)或è€?/span>Eclipse
3.2æ’äšgåQˆéœ€è¦ä¸‹è½½å’Œå®‰è£…NetBeans
5.5 或�/span> Eclipse
使用NetBeans 5.5下的JavaFXæ’äšgå¼€å?/span>Hello World ½E‹åº
æ¯å½“开始å¦ä¹ 一门新的è¯a€æ—Óž¼Œæˆ‘们必定è¦å†™Hello World ž®ç¨‹åºï¼š
æºç 列表1
import javafx.ui.*;
import java.lang.System;
Frame {
centerOnScreen: true
visible: true
height: 50
width: 350
title: "HelloWorld application..."
background: yellow
onClose: operation() {System.exit(0);}
content: Label {
text: "Hello World"
}
}
åœ?/span>NetBeans5.5å¼€å‘å’Œ˜q行˜q™ä¸ªž®ç¨‹åºæ¥éª¤å¦‚ä¸?/span>:
1. å¯åЍNetBeans 5.5.
2. 从主èœå•选择File -> New Project.
3. 在新™å¹ç›®½H—å£,选择目录常规目录å’?/span> Java 应用™å¹ç›®(点击下一æ?/span>).
4. 在新çš?/span>Java应用½E‹åº½H—å£,åœ¨é¡¹ç›®åæ–‡æœ¬æ¡†æ•²å…?/span> "FXExample".
5. 在相åŒçª—å£ï¼Œç”¨æµè§ˆæŒ‰é’®é€‰æ‹©™å¹ç›®çš„ç›®å½?/span>.
6. å–æ¶ˆ "Set as main project" å’?/span> "Create main class" å¤é€‰æ¡† (点击完æˆ).
7. å›_‡»FXExample -> Source Packages 和选择 New -> File/Folder.
8. 在新的文件窗å£ï¼Œé€‰æ‹©å¦ä¸€ä¸ªç›®å½•å’ŒJavaFXæ–‡äšg¾cÕdž‹åQˆç‚¹å‡ÖM¸‹ä¸€æ¥ï¼‰.
9. 在新çš?/span>JavaFXæ–‡äšg½H—å£åQŒæ•²å…?/span>"HelloWorld" ä½œäØ“æ–‡äšgåå’Œ"src"ä½œäØ“ç›®å½•(点击完æˆ).
10. 拯‚´æºç 列表1åˆ?/span> HelloWorld.fx.
11. å›_‡»FXExample ™å¹ç›®é€‰æ‹©™å¹ç›®å±žæ€?/span>.
12. 在项ç›?/span>FXExampleå±žæ€§å¯¹è¯æ¡† ,é€‰æ‹©ä»Žç›®å½•é¢æ¿è¿è¡ŒèŠ‚ç‚?/span>.
13. åœ¨å‚æ•°æ–‡æœ¬æ¡†æ•²å…¥ "Hello World" (点击完æˆ).
14. å›_‡»FXExample ™å¹ç›®é€‰æ‹©˜q行™å¹ç›®é€‰é¡¹.
如果一切良å¥?/span>,ä½ åº”è¯¥çœ‹åˆîC¸€ä¸ªçª—体如图三åQ?/span>
图三�/span> �/span>NetBeans
5.5ä¸è¿è¡?/span> Hello World 应用½E‹åº
çŽ°åœ¨ä½ æ‹¥æœ‰äº†å¼€å‘å’Œ˜q行ä»ÖM½•JavaFX应用½E‹åºçš?/span>IDE软äšg支æŒ.
JavaFX è¯æ³•
在æ£å¼å¼€å§‹å¦ä¹?/span>JavaFXåQŒè®©æˆ‘们‹¹è§ˆä¸€é该è¯è¨€çš„è¯æ³•è¦ç‚V€‚å¦‚æžœä½ éžå¸¸ç†Ÿæ‚‰Javaè¯è¨€åQŒè¿™äº›è¯æ³•的大多æ•îC¼šè®©ä½ 感到éžå¸¸ç†Ÿæ‚‰åQŒä½†æ˜¯æœ‰ä¸€äº›ä¼šç›¸å½“ä¸ä¸€æ —÷€?/span>
JavaFX 原始¾cÕdž‹
JavaFX 支æŒåŽŸå§‹¾cÕdž‹åQ?/span>String (对应äº?/span> java.lang.String), Boolean (对应äº?/span> java.lang.Boolean), Number (对应äº?/span> java.lang.Number) å’?/span> Integer (对应äº?/span> byte,short,int,long,BigInteger).
JavaFX å˜é‡
一ä¸?/span>JavaFXå˜é‡ä½¿ç”¨var关键å—声明。看下é¢çš„例å:
var x:Number = 0.9;
var name:String = "John";
var y:Integer = 0;
var flag:Boolean = true;
var numbers:Number = [1,2,3,4,5]åQ?/span>
JavaFX æ“作½W?/strong>
众所周知çš?/span>Javaæ“作½W?/span>&&, || å’?/span> ! åœ?/span>JavaFXä¸é‡‡ç”¨ä¸‹é¢çš„å½¢å¼åQ?/span>
· Java: &&
JavaFX: and
· Java: ||
JavaFX: or
· Java: ! JavaFX: not
JavaFX æ–ÒŽ³•
JavaFX 支挘q™äº›æ–ÒŽ³•. å…ähœ‰å‚æ•°ã€å˜é‡å£°æ˜Žå’Œ˜q”回值的æ–ÒŽ³•举例åQ?/span>
function taxes(x) { var t:Number = (19.0/100.0)*x; return t; }
JavaFX if è¯å¥
åœ?/span>JavaFXä¸ï¼Œä½ ä½ èƒ½é€šè¿‡ä½¿ç”¨ifè¯å¥ä½¿ç”¨æ¡äšg判æ–ã€?/span>
if (æ¡äšg) { //动作 } else if (æ¡äšg) { //动作 } else { //动作 }
JavaFX while è¯å¥
˜q™ä¸ª while è¯å¥åŒåœ¨Javaä¸çš„whileè¯å¥ç›æ€¼¼ã€?/span> while (æ¡äšg) { //动作}
JavaFX for è¯å¥
for è¯å¥ç”¨äºŽå¾ªçŽ¯å’Œé—´éš”ï¼ˆé—´éš”ä½¿ç”¨æ–ÒŽ‹¬å?/span>[]å’?/span> .. ½W¦å·è¡¨ç¤º).
//i ž®†å–å€û|¼š 0, 1, 2, 3, 4, 5象在 (i in [0..5]) { //ä¼´éš i的动ä½?/span> }代ç å—ä¸
JavaFX ˜q‡ç¨‹
JavaFX ˜q‡ç¨‹ä»?/span>operation 关键å—äØ“æ ‡å¿—ã€‚ä¸€ä¸ªç®€å•的例ååQ?/span>
operation startClock() {do{ while(true) {
if(seconds>=360) {seconds = 0; seconds = [0,6..360] dur 60000 linear;}
if(minutes>=360) {minutes = 0; minutes = [0,6..360] dur 3600000 linear;}
if(hours>=360) {hours = 0; hours = [0,6..360] dur 43200000 linear;} } }}
JavaFX ¾c?/strong>
JavaFX ¾cÖM‹Éç”?/span>class关键å?/span>. 一ä¸?/span> JavaFX ¾c»èƒ½å¤Ÿä‹Éç”?/span>extends 关键å—ç‘ô承多个类使用逗å·åˆ†å‰²˜q™äº›¾cÈš„åå—。在花括å·ä¸é—´ä½ å¯ä»¥æ”‘Ö±žæ€§ã€æ–¹æ³•å’Œ˜q‡ç¨‹åQŒä¾‹å¦‚下é¢çš„例ååQ?/span>
class Order {
attribute order_nr: String;
attribute ordertype: Order inverse Order.products;
attribute products: Order* inverse Order.ordertype;
function getOrderNr(): String;
operation addOrder(order: Order);
}
注æ„属性ä‹Éç”?/span>attribute关键å—声明,æ–ÒŽ³•体和˜q‡ç¨‹ä¸åœ¨¾cÖM½“ä¸ï¼Œå®ƒä»¬å•元定义在类声明以åŽåQŒåœ¨ä¸‹æ–‡ä½ 很快就能看到ã€?/span> inverse å奿˜¯ä¸€ä¸ªå¯é€‰é¡¹ åQŒå®ƒè¡¨ç¤ºä¸€¿UåŒåœ¨ç±»ä¸å¦ä¸€ä¸ªå±žæ€§çš„åŒå‘关系。在˜q™ä¸ªæ¡ˆä¾‹ä¸?/span>JavaFXž®†è‡ªåŠ¨å®Œæˆæ›´æ–ŽÍ¼ˆæ’å…¥ã€æ›¿ä»£å’Œåˆ 除åQ‰ä½ 能在Java.net上找到更完整çš?/span>文档ã€?/span>
熟悉JavaFX
在本ž®èŠ‚åQŒæ‚¨ž®†ä¼šçœ‹åˆ°ä¸€¾pÕdˆ—çš„å°ä¾‹ååQŒè¿™äº›ä¾‹å覆ç›?/span>JavaFX的儿U特性和功能。主è¦ç›®çš„æ˜¯è®©ä½ 熟悉JavaFX代ç å’?/span>JavaFX应用½E‹åºçš„é€»è¾‘ã€‚ç¬¬äºŒä¸ªç›®æ ‡æ˜¯å½“ä½ éœ€è¦å¼€å‘仅仅需è¦å‡ 行代ç 就会有éžå¸¸é…ïLš„GUIåQŒåЍç”Õd’Œå¥½çš„æ•ˆæžœæ—¶å€™ä‹Éä½ ç¡®ä¿?/span>JavaFXå€¼å¾—å¥½å¥½ç ”ç©¶ä¸€ä¸‹ã€‚æ‰€æœ‰åˆ—å‡ºçš„ä¾‹åž®†ä»‹¾lå…³äº?/span>JavaFX的技巧。æ¯ä¸€ä¸ªä¾‹ååªä½¿ç”¨å¾ˆå°‘çš„æ˜q°å¤„ç†ï¼Œæ‰€ä»¥ä¸è¦æƒ³æ‰‘Öˆ°å¤§é‡çš„æ³¨é‡Šã€‚所有这些å¯è®‰K—®çš„例åä½ éƒ½æ˜¯ä½ è‡ªå·±å°±èƒ½è¿è¡Œçš„åQŒæ‰€ä»¥è®©æˆ‘们开始å§ã€‚当我们需è¦ä‹Éç”?/span>System.out.println 打å°å±žæ€§å€¼æ—¶å€™ï¼Œä½ å¯ä»¥æŠŠå®ƒçš„åå—æ”¾è¿›å«æœ‰å¼•用的嗽W¦ä¸²åQŒè±¡æºç 列表2䏿‰€½Cºçš„é‚£æ ·ã€?/span>
æºç 列表2
//带有应用文本的表辑ּ
import java.lang.System;
var mynumber:Number =
10;
System.out.println("æ•°å—æ˜?/span>:
{mynumber}");
¾l“æžœ: æ•°å—æ˜?/span>:
10
JavaFX 支æŒå˜é‡çš„è®¡æ•°è¿™æ ·ä¸€ä¸ªæœ‰ç”¨çš„åŠŸèƒ½ã€‚è¿™ä¸ªåŠŸèƒ½åˆ©ç”¨ä¸‹é¢çš„三个æ“作½W¦å®žçŽŽÍ¼š
· ?: å¯é€‰çš„(å¯èƒ½ä¸?/span> null)
· +: 1或多ä¸?/span>
· *: 0或多ä¸?/span>
æºç 列表3
//å˜é‡è®¡æ•°
import java.lang.System;
var mynumbers:Number* =
[1,2,7];
System.out.println("æ•°å—æ˜?/span>:
{mynumbers}");
¾l“æžœ: æ•°å—æ˜?/span>: 1 2
7
åœ?/span>JavaFXä¸?/span>, åœ¨å£°æ˜Žéƒ¨åˆ†ä¸æŒ‡å®šå˜é‡çš„类型是å¯èƒ½çš„ã€?/span> ˜q™ä¸ä¼šäñ”ç”Ÿé”™è¯¯ï¼Œå› äØ“JavaFX ž®†åœ¨è¯¥å˜é‡çš„使用ä¸è‡ªåЍå‘现它的类型ã€?/span>
æºç 列表 4
//å˜é‡¾cÕdž‹æ˜¯å¯é€‰çš„
import java.lang.System;
var days =
["Monday,","Friday,","Sunday"];
System.out.println("ä½ å¿…™åÕd·¥ä½?/span>:
{days}");
¾l“æžœ: ä½ å¿…™åÕd·¥ä½?/span>: Monday, Friday,
Sunday
ä½ å¯ä»¥ä‹Éç”?/span>sizeof æ“作½W¦å¾—åˆîC¸€ä¸ªæ•°¾l„的大å°åQ?/span>
æºç 列表 5
//得到一个数¾l„的大å°
import java.lang.System;
var lotto =
[21,30,11,40,5,6];
System.out.println("数组大å°:{sizeof
lotto}");
¾l“æžœ: 数组大å°: 6
您能使用 [] æ“作½W¦å¾—到满‘ÏxŒ‡å®šæ¡ä»¶çš„åæ•°¾l„。æ¡ä»¶æ”¾åœ?/span> [] ä¸ä½œä¸ºå¸ƒž®”判æ–?/span> 。这个与XPath è°“è¯ç›æ€¼¼.
æºç 列表 6
//使用[] æ“作½W?/span> -ä¸?/span> XPathç›æ€¼¼
import java.lang.System;
var mynumbers =
[1,2,7,3,30,15,14,6,4];
var numbers = mynumbers[n|n < 10];
System.out.println("ž®äºŽ10的数å—䨓:
{numbers}");
¾l“æžœ: ž®äºŽ10的数å—䨓: 1 2 7 3 6
4
ä½ å¯ä»¥ä‹Éç”?/span>indexof æ“作½W¦å¾—åˆ°æŒ‡å®šåºæ•îC½¾|®çš„æ•°ç»„ä¸ä¸€ä¸ªå…ƒç´?em>åQ?/em>
æºç 列表 7
//˜q”å›žæŒ‡å®šåºæ•°ä½ç½®çš„æ•°¾l„ä¸çš„å…ƒç´?/span>
import java.lang.System;
var mynumbers = [1,2,7,3,30,15,14,6,4];
var number_four =
mynumbers[indexof . == 4];
System.out.println("æ•°å—4:{number_four}");
¾l“æžœ: æ•°å—4:
30
当您惌™¦å‘一个数¾l„䏿’å…¥ä¸€ä¸ªå…ƒç´ æ—¶åQŒä½ å¯ä»¥ä½¿ç”¨ä¸‹åˆ— insert è¯å¥ä¸çš„一ä¸?/span>:
· as first: 在第一个佾|®æ’å…?/span>
· as last:在最åŽä¸€ä¸ªä½¾|?/span>(默认)æ’å…¥
· before: 在å‰ä¸€ä¸ªä½¾|®æ’å…?/span>
· after:在下一个佾|®æ’å…?/span>
ä½ å¯ä»¥ä‹Éç”?/span> delete è¯å¥ä»Žä¸€ä¸ªæ•°¾l„ä¸åˆ 除一个元ç´?/span>.
æºç 列表8
//æ’å…¥å’Œåˆ é™¤è¯å?/span>
import
java.lang.System;
var mynumbers = [1,2,7];
System.out.println("Before inserting anything:
{mynumbers}");
insert 10 into mynumbers;
System.out.println("After
inserting at the end the \"10\" value:{mynumbers}");
insert [8,6,90] as
first into mynumbers;
System.out.println("After inserting at the first
positions the \"8,6,90\" values:{mynumbers}");
insert 122 as last into
mynumbers;
System.out.println("After inserting at the end the \"122\"
value:{mynumbers}");
insert 78 before mynumbers[3];
insert 11 after
mynumbers[3];
System.out.println("After inserting the \"78\" and \"11\"
values before/after the 3rd element:{mynumbers}");
delete mynumbers[.
== 122];
System.out.println("After deleting:{mynumbers}");
¾l“æžœ:
Before inserting anything: 1 2 7
After
inserting the 10 value at the end: 1 2 7 10
After inserting the 8, 6,
and 90 values at the first positions: 8 6 90 1 2 7 10
After inserting
the 122 value at the end: 8 6 90 1 2 7 10 122
After inserting the 78
and 11 values before/after the 3rd element: 8 6 90 78 11 1 2 7 10
122
After deleting: 8 6 90 78 11 1 2 7 10
JavaFXä¸çš„一个éžå¸¸å¥½çš„功能是list。这个功能ä‹Éç”?/span> select å’?/span> foreach æ“作½W¦å®žçŽ°ã€‚è¿™æœ‰ä¸¤ä¸ªä¾‹å(一个ä‹Éç”?/span> select å’Œä‹Éç”?/span> foreach) 得到指定间隔的奇数ã€?/span>
æºç 列表9
//JavaFXä¸çš„ select å’?/span> foreach æ“作½W?/span>
import java.lang.System;
function odd(p:Number)
{ return
select i from i in [1.0 ..p]
where (i%2 == 0.0);
}
var result = odd(10.0);
System.out.println("Odd
numbers:{result}");
¾l“æžœ: Odd numbers: 2.0 4.0 6.0 8.0 10.0
æºç 列表10 (å?/span> æºç 列表 9相åŒ, 但是æœ?/span> foreach)
//JavaFXä¸çš„select å’?/span> foreach æ“作½W?/span>
import java.lang.System;
function odd(p:Number) {
return foreach (i in
[1.0 ..p]
where (i%2 == 0.0)) i;
}
var result =
odd(10.0);
System.out.println("Odd numbers:{result}");
˜q™ä¸ªä¾‹å昄¡¤ºäº?/span> foreach 对于创å¾å¥½çš„æ•ˆæžœéžå¸¸æœ‰ç”¨ã€?/span>
æºç 列表11
//JavaFXä¸çš„ select å’?/span> foreach æ“作½W?/span>
import java.lang.*;
import javafx.ui.*;
import
javafx.ui.canvas.*;
Frame {
centerOnScreen: true
visible: true
height: 500
width: 500
title: "Foreach demo..."
onClose:
operation() {
System.exit(0);
}
content: ScrollPane {
background: white
view: Canvas {
content: bind
foreach (i in [1..8], j in [1..8])
Rect { x: i*30 y: j*30 width:30
height:30 fill: Color {red: (100+i) green: (100+j) blue: (100+(i*j))
}
stroke:white
strokeWidth:1 } }
}
}
囑֛›. ˜q行æºç 列表 11
使用åŒç®å¤´æ‹¬å·å¼•ç”¨äØ“JavaFX关键å—çš„å˜é‡å或者属性ååQŒå¦‚下所½Cºã€?/span>
æºç 列表 12
//æ ‡å¿—½W¦å¼•ç”?/span>
import java.lang.System;
for (<<for>> in [0..3]) {
System.out.println("for = {<<for>>}");
}
¾l“æžœ: for = 0 for = 1 for = 2 for = 3
å½“ä½ éœ€è¦å¼€å?/span>SwingæŽ¥å£æ—Óž¼ŒJavaFX 是一个伟大的工具åQŒå› ä¸?/span> JavaFX 考虑了éžå¸¸å¤šç”¨æ¥é™ä½Žä»£ç é‡å’Œå?/span>javax.swing.*åŒ?/span>òq¶å˜å‹å¥½ã€‚在上一节(使用NetBeans5.5ä¸çš„JavaFXæ’äšg‹¹‹è¯•Hello World应用½E‹åºåQ‰ï¼Œä½ 看åˆîCº†åˆ›å¾ä¸€ä¸ªçª—体是如何å®ÒŽ˜“。这有两个更好的例ååQšåˆ›å»ºæŒ‰é’®å’Œæ–‡æœ¬æ¡†ã€?/span>
æºç 列表 13
import javafx.ui.*;
import java.lang.System;
Frame{
content: Button { text: "Exit" action: operation() { System.exit(0); } }
visible: true
}
图五. ˜q行æºç 13
æºç 列表14
import javafx.ui.*;
Frame {
content: GroupPanel { var myRow = Row { alignment: BASELINE }
var label_col = Column { alignment: TRAILING }
var field_col = Column { alignment: LEADING }
rows: [myRow] columns: [label_col, field_col]
content: [SimpleLabel { row: myRow column: label_col text: "Type your text here:" }, TextField { row: myRow column: field_col columns: 50 }] }
visible: true
};
囑օ. ˜q行æºç 14
Java.net 也有使用JavaFxåˆ›å¾ Swing接å£çš„æ•™½E‹ã€?/span>