- 浏览: 387190 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
793059909:
scala> def count(x:Double,n: ...
快学Scala习题解答—第二章 控制结构和函数 -
793059909:
scala> def countdown(n:Int){ ...
快学Scala习题解答—第二章 控制结构和函数 -
daquan198163:
可是奇慢无比啊,切换个页签得等一分钟啊!!!!!!!!
误会ZK Studio了!Sorry,Sorry! -
rmn190:
受教了, 今天我第一天遇到这个问题, 以前没想到fmt标签还跟 ...
JSP中的国际化(转) -
suu:
都是栈里的拷贝 这句话让我从一头雾水到豁然开朗 谢谢了.
争论话题:Java传值还是传引用?
第一个附件是使用JavaFX编写一个Clock的教程,很详细。运行结果如下。
学习一门语言最好的方法就是看例子+多动手。所以先从它的Demo开始学习。这个Demo还是比较简单的。总共就一百多行。但是效果却不凡
从Frame开始看吧!但码如下:
很简单吧!即使以前从来没看过JavaFX,只要你学过j2se里的awt或swing,即使是皮毛,也基本能看懂。
从这段代码能看出如下几点:
1.javaFX一般是不需要分号来标记结尾的。这应该算是现在脚本语言的一种特色了。(说到一般,当然就有特殊了,上面代码里就有一处用了分号)
2.给属性赋值不是=,而是:。title,width,height....
3.closeAction看名字应该不是普通属性,再看后面给它赋的是个function,而这个function很明显是用来关闭程序用的。应该就是与swing里面的监听器类似的东西了。
4.javafx实例话不需要使用new关键字,看content:Clock{},Clock是类,要实例化,只要后面加个{}即可。
整个代码里面最重要的地方应该也是很明显的,stage属性。请出api来吧。看看它的用法。
stage Stage
This is the stage that the window presents on screen for showing content.
这是用来显示用的。它接受的参数类型是Stage,再看Stage.
content Node[]
The array of Nodes to be rendered on this Stage.
Stage里面的content接受Node类型的数组,并且将这些Node显示出来。
再看我们的代码,content接受的是Clock{}这个实例,而它要接受的是Node类型,所以可以猜想出来了,Clock肯定是Node的子类。
所以呢,Clock就继承了CustomNode类。继续看api,不过这里建议是ctrl+鼠标左键,点进去看源码,感觉那里更清晰一点。
这是一个抽象类,并且继承了Node,而上面有一段说明和一个例子。
如果你想定义自己的Node类型的类,那么就继承CustomNode并且实现它的create方法。所以Clock就这么做了 这里的create()后面跟了个:Node,是说这个方法的返回类型是Node类型。就java里面的类型拿后面就行了。
那下面看看Clock的代码
好~~~长一段。而create方法就占了一大半。那就先看create方法。
直接就return了 返回一个Group,继续请出api吧!
The Group class represents a list of Nodes objects.
Group类是用来描述(可能存放更好像)一组Node对象的。
content Node[]
而content属性就接受Node数组了。很像Java里面的泛型集合类List<Node>,不过这里是数组。
那么仔细看下代码,余下的代码都是在[]之内的,那么可以说明,余下的代码都是一个个的Node,而[]就表示数组了,每个数组元素之间以逗号隔开。眼尖的肯定发现了,里面还有一个Group,那么Group肯定也是继承了Node了,而且返回的是一个Group,而需要的是一个Node,那就可以肯定刚才的猜想了。不信看api贝
那么开始看节点,第一个节点
ImageView继承自Node,作用显示图片用的,image属性和content应该是类似的,不过接受Image类型,Image里面的url定位到图片上去。猜测完毕。api鉴定。。
这里的{__DIR__},我没搞清楚是什么东东,应该是代替路径的,目前猜测是代替该类所在的路径,没找到资料,有高人请指点一下。
第二个节点是Group,里面的第一个属性是transform,接受Translate类型。作用不好猜,直接看api。
transform Transform[]
Defines the array of Transform objects to be applied when this Node is shown.
transform属性定义了一组Transform对象,当Node被显示出来的时候来应用这些Transform对象。
Transform
This class provides static functions to perform rotating, scaling, shearing, and translation transformations for Affine objects.
Transform提供了一组静态的方法类为Affine对象实现旋转,刻度,修剪和转换等动作。(翻译不准。凑合。。)
那么这里的Translate肯定就试Transform的子类了。
transform: Translate { x: centerX, y: centerY }这个就是定位用的,可以改变一下centerX,centerY的值,再看看运行结果。
然后就又是一堆的Node了,基本类似,不废话了。
还有几个地方就是。
for (i in [3, 6, 9, 12]),循环,和foreach循环很类似的东西。
transform:Rotate { angle:30 * i } 旋转,旋转角度为30的倍数。
transform:Rotate { angle: bind seconds * 6 }也是旋转,不过这里用到了一个关键字,bind,现在的理解是,很像注册监听器的动作。bind了属性后,那么seconds改变后,angle属性也随之改变。不过这里的bind好像是双向的,也就是angle改变后,也会反应到seconds上去。后面再研究。
从这个程序可以看出,javaFX与swing相比,的确简化了不少,就Transform来说,旋转,移动什么的只需要一行代码,不需要那么多废话了。
netbean6.5自带的插件
我看了一下,fx1.0里面的确没有javafx.application.Frame。
应该被删除了。
你使用javafx.stage.Stage试试。
fx新旧版本差别比较大,目前以fx1.0为准
import javafx.application.Frame;
这个包找不到,不知道有没有别的方法啊
确认你的javafx开发包是最新的1.0版本吗?
学习一门语言最好的方法就是看例子+多动手。所以先从它的Demo开始学习。这个Demo还是比较简单的。总共就一百多行。但是效果却不凡
从Frame开始看吧!但码如下:
Frame { title:"JavaFX 时钟应用程序" width:295 height: 325 closeAction:function() { java.lang.System.exit( 0 ); } visible:true stage:Stage { content: Clock{} } }
很简单吧!即使以前从来没看过JavaFX,只要你学过j2se里的awt或swing,即使是皮毛,也基本能看懂。
从这段代码能看出如下几点:
1.javaFX一般是不需要分号来标记结尾的。这应该算是现在脚本语言的一种特色了。(说到一般,当然就有特殊了,上面代码里就有一处用了分号)
2.给属性赋值不是=,而是:。title,width,height....
3.closeAction看名字应该不是普通属性,再看后面给它赋的是个function,而这个function很明显是用来关闭程序用的。应该就是与swing里面的监听器类似的东西了。
4.javafx实例话不需要使用new关键字,看content:Clock{},Clock是类,要实例化,只要后面加个{}即可。
整个代码里面最重要的地方应该也是很明显的,stage属性。请出api来吧。看看它的用法。
stage Stage
This is the stage that the window presents on screen for showing content.
这是用来显示用的。它接受的参数类型是Stage,再看Stage.
content Node[]
The array of Nodes to be rendered on this Stage.
Stage里面的content接受Node类型的数组,并且将这些Node显示出来。
再看我们的代码,content接受的是Clock{}这个实例,而它要接受的是Node类型,所以可以猜想出来了,Clock肯定是Node的子类。
所以呢,Clock就继承了CustomNode类。继续看api,不过这里建议是ctrl+鼠标左键,点进去看源码,感觉那里更清晰一点。
public abstract class CustomNode extends Node {
这是一个抽象类,并且继承了Node,而上面有一段说明和一个例子。
/** * Define your own node classes by extending this class and * implementing its create method. Example: @example import javafx.scene.*; import javafx.scene.paint.*; import javafx.scene.geometry.*; public class Bars extends CustomNode { public function create():Node { return Group { content: for(x in [0..4]) { Rectangle { y: indexof x * 20 width: 100 height: 10 fill:Color.RED } } } } } Bars { } @endexample
如果你想定义自己的Node类型的类,那么就继承CustomNode并且实现它的create方法。所以Clock就这么做了 这里的create()后面跟了个:Node,是说这个方法的返回类型是Node类型。就java里面的类型拿后面就行了。
那下面看看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: [ Circle { radius: radius + 10 //stroke: Color.BLUE }, // 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[ ], // code for the clock's first center circle 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 { 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 { 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(); } }
好~~~长一段。而create方法就占了一大半。那就先看create方法。
直接就return了 返回一个Group,继续请出api吧!
The Group class represents a list of Nodes objects.
Group类是用来描述(可能存放更好像)一组Node对象的。
content Node[]
而content属性就接受Node数组了。很像Java里面的泛型集合类List<Node>,不过这里是数组。
那么仔细看下代码,余下的代码都是在[]之内的,那么可以说明,余下的代码都是一个个的Node,而[]就表示数组了,每个数组元素之间以逗号隔开。眼尖的肯定发现了,里面还有一个Group,那么Group肯定也是继承了Node了,而且返回的是一个Group,而需要的是一个Node,那就可以肯定刚才的猜想了。不信看api贝
那么开始看节点,第一个节点
ImageView { image: Image { url: "{__DIR__}clock_background.png" } }
ImageView继承自Node,作用显示图片用的,image属性和content应该是类似的,不过接受Image类型,Image里面的url定位到图片上去。猜测完毕。api鉴定。。
这里的{__DIR__},我没搞清楚是什么东东,应该是代替路径的,目前猜测是代替该类所在的路径,没找到资料,有高人请指点一下。
第二个节点是Group,里面的第一个属性是transform,接受Translate类型。作用不好猜,直接看api。
transform Transform[]
Defines the array of Transform objects to be applied when this Node is shown.
transform属性定义了一组Transform对象,当Node被显示出来的时候来应用这些Transform对象。
Transform
This class provides static functions to perform rotating, scaling, shearing, and translation transformations for Affine objects.
Transform提供了一组静态的方法类为Affine对象实现旋转,刻度,修剪和转换等动作。(翻译不准。凑合。。)
那么这里的Translate肯定就试Transform的子类了。
transform: Translate { x: centerX, y: centerY }这个就是定位用的,可以改变一下centerX,centerY的值,再看看运行结果。
然后就又是一堆的Node了,基本类似,不废话了。
还有几个地方就是。
for (i in [3, 6, 9, 12]),循环,和foreach循环很类似的东西。
transform:Rotate { angle:30 * i } 旋转,旋转角度为30的倍数。
transform:Rotate { angle: bind seconds * 6 }也是旋转,不过这里用到了一个关键字,bind,现在的理解是,很像注册监听器的动作。bind了属性后,那么seconds改变后,angle属性也随之改变。不过这里的bind好像是双向的,也就是angle改变后,也会反应到seconds上去。后面再研究。
从这个程序可以看出,javaFX与swing相比,的确简化了不少,就Transform来说,旋转,移动什么的只需要一行代码,不需要那么多废话了。
评论
7 楼
Ivan_Pig
2009-01-08
yixinyue 写道
netbean6.5自带的插件
我看了一下,fx1.0里面的确没有javafx.application.Frame。
应该被删除了。
你使用javafx.stage.Stage试试。
fx新旧版本差别比较大,目前以fx1.0为准
6 楼
yixinyue
2009-01-08
netbean6.5自带的插件
5 楼
Ivan_Pig
2009-01-08
yixinyue 写道
import javafx.application.Frame;
这个包找不到,不知道有没有别的方法啊
确认你的javafx开发包是最新的1.0版本吗?
4 楼
yixinyue
2009-01-08
import javafx.application.Frame;
这个包找不到,不知道有没有别的方法啊
这个包找不到,不知道有没有别的方法啊
3 楼
renyanwei
2008-11-16
我要 学习 FLEX
2 楼
Ivan_Pig
2008-11-09
Swing不是一直被人诟病吗?传言javafx是简化桌面开发的。目标当然是RIA了。
感觉和java比,只是换了种写法而已。学习曲线比较低。
至少比学习Flex的mxml,actionscript和silver light要容易一些,而且能直接调用java类,java优势都在服务端,客户端发展好,还是不错的
感觉和java比,只是换了种写法而已。学习曲线比较低。
至少比学习Flex的mxml,actionscript和silver light要容易一些,而且能直接调用java类,java优势都在服务端,客户端发展好,还是不错的
1 楼
presses
2008-11-09
其实我一直弄不懂javafx和java除了名称和运行环境外有什么联系。
反正学一门新语言,as是不是更有说服力?
反正学一门新语言,as是不是更有说服力?
发表评论
-
JavaFX与后台交互
2009-04-05 22:16 9899目前JavaFX相关的资料都是基本语法,以及界面相关。 ... -
Flex使用点滴
2009-03-10 14:30 0学习Grails时,发现Grails可以和Flex集成 ... -
JavaFX GUI------1动画效果
2009-02-24 22:50 5633之前翻译了JavaFX Script,后来一段时间就 ... -
学习JavaFX脚本语言(翻译)pdf下载
2008-12-19 14:35 7244呵呵,JavaEye提供的制作pdf功能真是太好了。 之前比较 ... -
学习JavaFX脚本语言----10,11(完)
2008-12-12 16:30 2694Lesson 10: Packages 目录 - St ... -
学习JavaFX脚本语言----8,9
2008-12-11 18:01 2391Lesson 8: Data Binding and Trig ... -
学习JavaFX脚本语言----6,7
2008-12-10 15:10 2236Lesson 6: Operators 目录: ... -
学习JavaFX脚本语言----5
2008-12-09 20:23 2245Lesson 5: Sequences 目录 - 创建 ... -
学习JavaFX脚本语言----3,4
2008-12-07 16:52 2312Lesson 3: Using Objects 目录 - ... -
学习JavaFX脚本语言----1,2
2008-12-06 21:39 4099很遗憾,JavaFX目前没有发布Linux版本!我使用 ... -
JavaFX Demo学习2-----ImageRollover
2008-11-10 22:46 3870今天偷个懒。一个很简单的程序,响应鼠标事件,效果如下。代码在附 ... -
JavaFX学习准备工作
2008-11-08 15:19 3016找了一遍网络,现在最好的JavaFX开发工具应该就是NetBe ... -
NetBeans6.1---新的JavaFX开发体验
2008-11-07 23:56 1819之前看过一点JavaFX,后来就没再关心。这几天看网上 ... -
JavaFX学习笔记
2008-03-13 11:07 28631.JavaFX是一种静态输入的语言 与javascr ... -
Netbeans5.5.1的JavaFX插件好像有问题
2007-12-25 15:00 1488如下语法。。应该没问题的。。 在eclipse下运行成功。。 ...
相关推荐
在"JavaFX Demo学习2-----ImageRollover"这个主题中,我们将深入探讨如何使用JavaFX来实现图像鼠标悬停时的效果变化,即Image Rollover效果。这种效果常见于网页设计和图形用户界面开发中,当鼠标指针移到图像上时,...
JavaFX Scene Builder是一款强大的图形用户界面(GUI)构建工具,专为JavaFX平台设计,用于简化和加速桌面应用的界面设计。它允许开发者通过拖放组件的方式,无需编写任何代码,即可创建美观且功能丰富的用户界面。...
标签"javafx_scenebuil"和"java javafx"分别指向JavaFX Scene Builder和JavaFX技术本身,暗示了这个安装包是关于JavaFX GUI设计工具的,对于学习和使用JavaFX的开发者来说是必不可少的资源。 在下载的压缩包文件中...
JavaFX Scene Builder 2.0 是一款图形化用户界面(GUI)构建工具,专为JavaFX平台设计。它使得开发者可以快速、直观地设计和布局应用程序的用户界面,而无需编写大量的代码。这款软件尤其适合那些希望专注于业务逻辑...
javafx.base-11.0.0-SNAPSHOT-linux.jar,javafx.base-11.0.0-SNAPSHOT-mac.jar,javafx.base-11.0.0-SNAPSHOT-win.jar,javafx-base-11.jar,javafx-base-11-win.jar,javafx-graphics-11.jar,javafx-graphics-11-win....
JavaFX Scene Builder是JavaFX平台中的一个重要工具,用于可视化构建用户界面(UI)。它提供了图形化界面,使得开发者可以无需编写代码就能设计出美观且功能丰富的GUI。在本压缩包"javafx_scenebuilder-2_0-windows...
1. **库文件**:包括`lib`目录下的各种jar文件,如`javafx.base.jar`、`javafx.controls.jar`、`javafx.fxml.jar`、`javafx.graphics.jar`等,它们分别包含了JavaFX的基础组件、控制组件、FXML布局文件解析器和图形...
JavaFX是基于java语言的 图形化界面工具箱,带有大量的内置组件,如按钮,文本字段,表格,树,菜单,图表等; JavaFX支持 2D图形、3D图形、WebView; JavaFX编写的程序,可以运行在 Windows、Linux、Mac、iOS、Android / ...
JavaFx SceneBuilder2.0 看好多人官网下载不了我放这里面
javafx_scenebuilder-2_0-windows.msi 官方下载地址: https://www.oracle.com/java/technologies/javafxscenebuilder-1x-archive-downloads.html
1. **丰富的UI组件库**:JavaFX包含一套完整的UI组件,如按钮、文本框、表格、菜单等,这些组件具有高度可定制性和可扩展性。 2. **2D和3D图形**:JavaFX支持高性能的2D和3D图形渲染,允许开发者创建复杂的视觉效果...
linux系统下,可用如下两...java --module-path /home/ubuntu20/javafx-sdk-18/lib --add-modules javafx.controls,javafx.fxml -jar EQMSAny_jar.jar 其中 /home/ubuntu20/javafx-sdk-18 是上包所解压后的你放置的路径
javaFx 学习--之布局菜单
如果这个Demo包含图形元素,我们可以学习到如何在JavaFX中绘制和操作2D或3D图形。 媒体支持是JavaFX的另一个亮点,它内置了对音频和视频播放的支持。`javafx.media`包提供了`MediaPlayer`和`MediaView`类,可以轻松...
1. **VM.txt**: 这可能是一个文档,包含了关于Java虚拟机(JVM)的配置信息或者使用JavaFX的特定要求。开发者可以参考这个文件来确保他们的运行环境与JavaFX兼容。 2. **src.zip**: 这个文件包含了JavaFX的源代码。...
javafx_scenebuilder-2_0-windows.msi javafx_scenebuilder-2_0-macosx-universal.dmg javafx_scenebuilder-2_0-linux-x64.tar.gz javafx_scenebuilder_samples-2_0.zip javafx_scenebuilder_kit_javadoc-2_0.zip
总之,`javafx-src.zip`是一个宝贵的资源,对于想要深入了解JavaFX并提高其开发技能的Java程序员来说,它提供了一个学习和调试的平台。通过研究源代码,开发者可以更有效地利用JavaFX的功能,创建出高质量、高性能的...