`
metaphy
  • 浏览: 344639 次
  • 性别: Icon_minigender_1
  • 来自: 大西洋底
社区版块
存档分类
最新评论

JavaFX初识

阅读更多
Sun确实反应太慢,在Adobe Flash平台已经可以开发产品级RIA应用的时候,它给出的road map还是慢慢腾腾:

2008年7月,Sun将开放JavaFX Desktop SDK
2008秋,JavaFX Desktop 1.0 发布
2009春,JavaFX Mobile and TV 1.0发布

也就是说,截至今天,1.0依然在按计划进行中,我们体验的只是Preview版本(Sun也不建议用这个版本进行产品开发),似乎让人灰心,但没关系,相信Sun可以后来居上,譬如NetBeans之于Eclipse(当然它们至今仍未分高下)。从上面也可以看出,JavaFX Desktop和JavaFX Mobile and TV 都会发布,似乎又回到了1995年时候的Sun目标。

OK,先让我们来看一下JavaFX到底是什么。
JavaFX Preview SDK 是JavaFX platform的体验版本。这一版本是定位于web脚本开发人员和那些想事先体验JavaFX技术和工具的家伙。这一SDK同样包含"Nile Project",这是一套工具和插件,能让脚本开发人员用拖放的方式建立图形化的东西。运行JavaFX Application需要:
1.Java SDK 1.6 Update 7或更新,最好是Update 10
2.JavaFX Preview SDK (上面说了,JavaFX SDK 1.0还在娘胎中),请下载Netbeans IDE 6.1 with JavaFX: http://javafx.com/htdocs/downloadpage.html


而开发JavaFX,则需要写JavaFX Script,这是一种新的脚本语言,旨在方便高效地创建图形界面及绑定数据,而这个所谓的图形界面,最终调到的是swing,但需要注意:
1.JavaFX能提供Swing所没有的一些Widgets
2.对Swing组件的的操作,使用JavaFX Script可能有所限制,也即是说,Swing里面对图形界面元素控制的一些方法或属性,在Java FX里面可能不存在。
下面是用JavaFX开发的一个Clock,其实Swing也完全可以做到:


JavaFX Script看上去:
package myclockproject;

import javafx.application.Frame;
import javafx.application.Stage;
import javafx.scene.CustomNode;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.geometry.Circle;
import javafx.scene.paint.Color;
import javafx.scene.geometry.*;
import javafx.scene.text.Text;
import javafx.scene.Font;
import javafx.scene.FontStyle;
import javafx.scene.transform.Translate;
import javafx.scene.transform.Rotate;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;

import java.util.Date; 
import java.lang.Math;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.ext.swing.Button;

Frame {
    title : "Java FX Clock Application"
    width : 295
    height: 325
    closeAction : function (){
        java.lang.System.exit(0) ;
    }
    visible: true
    stage: Stage {         
        content: Clock{}
    } 
}

public class Clock extends CustomNode {
    public attribute radius : Number = 77;
    public attribute centerX : Number = 144;
    public attribute centerY : Number = 144;
    public attribute hours:Number;
    public attribute minutes:Number;
    public attribute seconds:Number;

    public function nextTick () {  
        var now = new Date();
        seconds = now.getSeconds();
        minutes = now.getMinutes();
        hours = now.getHours();
    } 
    
    public function create(): Node {
        return Group {
            content:[ 
                ImageView {
                    image: Image {
                        url: "{__DIR__}/clock_background.png"
                    }
                },
 
                Group{
                    transform: Translate { x: centerX, y: centerY }
                    content: [                        
                // code to display the numbers for every third hour 
                        for (i in [3, 6, 9, 12])
                        Text { 
                            transform: Translate { x : -5, y : 5 }        
                            font: Font {size: 16 style: FontStyle.BOLD }
                            x: radius * (( i + 0 ) mod 2 * ( 2 - i / 3)) 
                            y: radius * (( i + 1 ) mod 2 * ( 3 - i / 3)) 
                            content: "{i}"    
                        },

                //code to display a circle for the rest of the hours on the clock    
                        for (i in [1..12]) 
                        if (i mod 3 != 0 ) then Circle {       
                            transform:Rotate { angle: 30 * i }        
                            centerX: radius
                            radius: 3        
                            fill: Color.BLACK
                        } else [ ],
                        Circle { 
                            radius: 5
                            fill: Color.DARKRED
                        },
                //code for the smaller center circle
                        Circle {
                            radius: 3
                            fill: Color.DARKRED
                        },
                        //code for the seconds hand
                        Line {
                            transform: Rotate { angle: bind seconds * 6 }
                            endY: -radius - 3
                            strokeWidth: 2
                            stroke: Color.RED
                        },
                        //code for the hour hand
                        Path {
                        //for the hour hands
                            transform: Rotate { angle: bind (hours + minutes / 60) * 30 - 90 }
                            fill: Color.BLACK
                            elements: [
                                MoveTo {x: 4, y: 4},
                                ArcTo {x: 4 y: -4 radiusX: 1 radiusY: 1},
                                LineTo{ x: radius - 15  y: 0},
                            ]
                        },
                        // code for the minutes hand
                        Path {
                            //for the minutes hand
                            transform: Rotate { angle: bind minutes * 6 - 90 }
                            fill: Color.BLACK
                            elements: [
                                MoveTo {x: 4, y: 4},
                                ArcTo {x: 4 y: -4 radiusX: 1 radiusY: 1},
                                LineTo{ x: radius  y: 0},
                            ]
                        }]}
            ]
        };
    }
    
    init {
        var timeline = Timeline {
            repeatCount: Timeline.INDEFINITE
            keyFrames : [
                KeyFrame {
                    time : 1s
                    action: function() {
                        nextTick();
                    }
                }
            ]
        }
        timeline.start();
        
    }
}

JavaFX Script还是比较简单的。它与Java的差距,比JavaScript与Java的差距,个人感觉小的多。

如何发布JavaFX应用呢?JavaFX内容可以通过Java Web Start发布为应用程序(这将最终运行在用户的Desktop上面),或者发布为Applets作为Java的Plug-In;无论哪种方式,都需要有一个JavaFX runtime.

参考:
Sun:
http://www.sun.com/software/javafx/index.jsp
Sun为Java FX专题建立的网站,网站本身也是Java FX技术的一个演示。
http://javafx.com/
InfoQ:
http://www.infoq.com/news/2008/01/javafx-chet-haase
JavaFX Script:
http://www.sun.com/software/javafx/script/index.jsp

Clock工程src下载(程序和资源来源于Sun):
  • src.zip (74.6 KB)
  • 描述: Clock工程src
  • 下载次数: 189
3
0
分享到:
评论
1 楼 skzr.org 2008-10-11  
呵呵,Netbean和Eclipse不相上下,我觉得差远了!

对于FX我更加看好Flex,除非jvm大小只有10M,不过我关注的不是做网站,是行业系统,所以觉得Eclipse比FX和Flex更好的选择,除非adobe真正本着开源我就会选择它!
曾经打算使用flex发现相关的配套的都他妈的要授权,对于企业和开发商,这就麻烦了。。。

相关推荐

    北大青鸟初识java

    10. **基础的GUI编程**:Java Swing或JavaFX库提供了创建图形用户界面的工具,如按钮、文本框、面板等组件,以及事件处理机制,初步了解如何构建桌面应用程序。 以上只是“北大青鸟初识Java”课程的部分关键知识点...

    1.初识Java.zip

    【初识Java】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(后被Oracle公司收购)于1995年发布。它的设计目标是具备“简单性、面向对象、健壮性、安全性、可移植性、高效性、多线程和动态性”等...

    栋栋仔Android学习宝典第二章初识Android程序[汇编].pdf

    本书的第二章“初识Android程序”主要涵盖了以下几个关键知识点: 1. **JDK的下载、安装与配置**:JDK(Java Development Kit)是编写Java应用程序的基础,包括了Java编译器、Java运行环境和各种开发工具。在这一...

    java21-25

    4. III-22.mp3:可能讲解了GUI编程,如Swing或JavaFX,或者探讨了Java的模块化系统(Java 9及以后版本)。 5. III-24.mp3:这节课可能涵盖了Java的单元测试、持续集成,或者介绍了Java的并发编程工具,如...

    JAVA应用程序设计开发

    Java应用程序设计与开发是计算机科学领域的一个重要主题,它涵盖了从初识Java语言到构建复杂系统的一系列技术。Java以其“一次编写,到处运行”的特性,成为跨平台应用开发的首选语言之一。以下是对Java应用程序设计...

    完整的JAVA骨灰级课堂讲义

    适合入门并准备精通的同志,意味着这份资料能够陪伴学员从初识Java到掌握其精髓,进阶成为熟练开发者。 【标签】"java"明确指出这是一份关于Java编程语言的资料,Java是一种广泛应用的面向对象的编程语言,具有跨...

    实用Java自学课件

    通过这些详细讲解和实例分析,"实用Java自学课件"将帮助你逐步提升Java编程技能,从初识Java到能够独立进行项目开发,踏上Java编程的殿堂之旅。无论你是零基础的新手,还是希望深化理解的开发者,这个课件都将是你...

    研究生科研信息管理系统

    在Java编程中,可以使用Java Swing或JavaFX库来创建GUI,这两者都提供了丰富的组件和布局管理器,便于构建美观且功能丰富的界面。 3. **Java Server Pages(JSP)**: - JSP是Java EE平台的一部分,用于开发动态...

    html5 的入门资料

    本篇资料将带你初识HTML5的各项内容,包括其历史背景、主要特性以及应用前景。 HTML5的诞生与多个组织密切相关。欧洲核子研究中心(CERN)的蒂姆·伯纳斯-李是HTML的创始人,他同时也是万维网联盟(W3C)的创立者。...

    WangsicongAndAltman.rar

    《初识Java编程:飞机大战游戏的实现》 在编程世界中,Java语言以其跨平台性和丰富的类库深受开发者喜爱,尤其对于初学者而言,它提供了友好的学习曲线。本项目“WangsicongAndAltman.rar”便是一个基于Java的基础...

    初始java第一讲

    Java开发基础:初识Java Java,一种广泛使用的高级编程语言,由Sun Microsystems(现为Oracle Corporation的一部分)在1995年推出。它的设计目标是具有“一次编写,到处运行”的特性,使得代码能够在各种操作系统上...

    java 习题与解答

    1. **初识JAVA**: - ** HelloWorld 示例**:学习Java的第一步通常是编写"Hello, World!"程序,了解基本语法和编译运行流程。 - **JDK和JRE**:理解Java Development Kit (JDK)和Java Runtime Environment (JRE)的...

    Java学习路径(三)过程篇.txt

    #### 一、初识Java:安装与环境配置 在开始学习Java之前,最重要的是准备好开发环境。这通常包括安装JDK(Java Development Kit),这是开发Java程序的基础工具包。JDK包含了编译、运行Java程序所需的工具和文档,...

    Pong:大学上课时做的一个项目

    Pong是一款经典的电子游戏,它在计算机历史中占据着特殊的地位,也是许多程序员初识游戏开发的起点。在这个项目中,我们看到开发者使用Java语言重新实现了这款经典游戏。Java是一种广泛应用于各种领域的面向对象的...

    学校

    1. **初识Java**: 学习Java首先从理解其基础概念开始,包括面向对象编程(OOP)原则,如封装、继承、多态,以及类和对象的概念。学校通常会引导学生从编写简单的"Hello, World!"程序开始,逐步深入到更复杂的编程...

Global site tag (gtag.js) - Google Analytics