operation WeatherData.update(){ var content = new StringBuffer(""); do later { var url = new URL( source ); var is = url.openStream(); var reader = new BufferedReader(new InputStreamReader(is)); var line; while (true) { line = reader.readLine(); if (line == null) { break; } content.append(line); content.append("\n"); } // end while is.close(); text = content.toString(); } // end do later }
现在创建窗口来表示用户接口。注意这个Frame被定义成有一个WeatherData类的本地实例。其中的URL是用来获得我所在的县下周的天气预报。
当这个按钮被点击之后,更新操作被调用,创建一个线程来执行“do later”中的后续代码来填充文本变量。注意TextArea的文本内容是通过wdata.text变量的“bind”关键字来定义的。当该变量的内容被更新之后,新的文本将自动的出现在窗口当中。Frame { var wdata = WeatherData { text: "initialized" source: "http://forecast.weather.gov/MapClick.php?zoneid=TXZ173&TextType=1" } title: "Weather Forcast" width: 400 height: 400 background: cyan content: BorderPanel { border: EmptyBorder{ top: 10 left: 10 bottom: 10 right: 10 } top: Button { text: "update" action: operation(){ wdata.update();} height: 80 } center: TextArea { text: bind wdata.text } } // close content visible: true }
JFX所缺少的东西
JFX语言提供的功能当中最明显的缺憾就是少了像处理swing对象一样方便的操纵XML数据的方法。当然你可以创建自己定制的Java类,并在JFX脚本中使用它们,但是如果能够在处理基于XML的Web service中使用XQuery或者XPath的语法,那么就太方便了。
IDE的支持
我在NetBeans 5.5和Eclipse IDE中都找到了插件。NetBeans的插件提供了对编辑语法和用法的支持,但是不完全JavaDocs类型的文档。NetBeans插件不支持图形接口版面,但是这应该不是很难增加。另外一个商业的IDE,ReportMill,正在尝试在他们的报表设计编辑器中支持JFX。
谁将是它的竞争对手?
假设JFX在使用Swing组件创建富用户接口方面已经做的很好,让我们想想谁会与之竞争。在我看来,Flash是当今Internet上使用得最广的富用户接口技术。Flash拥有巨大的优势,因为它几乎在所有的Internet用户浏览器上安装了,并且很容易被升级。
几年前,我注意到了Flex脚本语言,它可以被用于使用XML来定义Flash用户接口,但是在当时这套开发工具的许可证费用非常昂贵。Adobe收购了Macromedia改变了这种状况,现在有一个免费的Flex编辑器并且计划将Flex的“核心”作为开放源代码项目,而更高级的工具继续作为商业产品。
结论
Sun的JavaFX还处于开发的早期阶段。虽然有一些IDE的支持,但是我们仍然缺少正式的文档。凭借着Sun和开放源代码社区的支持,JFX在先进Web service客户端的创建中值得考虑