论坛首页 Java企业应用论坛

JavaFX 新Web Service客户端脚本语言

浏览 1728 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-05-09  
JFX基础

  这个语言支持常见的变量类型,比如字符串、整型、浮点型和布尔值。对于list和array的扩展支持的语法,在我看来非常强大。这个语言还提供了异常的创建和处理,并且引入了新的想法,即任何对象可以被抛出,不仅仅是标准的Java Throwable类型。JFX脚本还可以导入Java类、创建Java对象和调用他们的方法。

  JFX对象通过声明的方法来创建。这对于那些为“swing”Java用户接口类提供简化的class非常有用。我们在下面的完整脚本中查看一下JFX对象是如何通过声明的方式来创建的。

importjavafx.ui.*;
  Frame{
  title:"HelloWorldfromJavaFX"
  width:200
  height:80
  content:Button{
  text:"HelloWorld"
  }
  visible:true
  }

在这个例子中,Frame和Button是用来隐藏将在屏幕上显示出来的JFrame和JButton对象的创建细节的脚本类型。这个Frame类有名为“title”、“width”、“height”、“content”和“visible”的公共“属性”,它们都在声明中被设置了。

  消息处理问题

  JFX也有每一个图形用户接口工具都会遇到的问题。点击按钮之类的用户事件一定不能和需要长时间执行任务的事件处理线程绑定,因为在该任务执行的时候,这个接口会毫无反应。JFX提供了“do”和“do later”原语来处理这个问题。我使用一段脚本来试验JFX显示出从天气预报服务站点检索出来的数据,其中使用了“do later”。首先,我定义了一个叫做WeatherData的JFX类。这个类有两个属性和一个操作。
importjavafx.ui.*;
  importjava.net.URL;
  importjava.lang.StringBuffer;
  importjava.lang.System;
  importjava.io.InputStreamReader;
  importjava.io.BufferedReader;
  classWeatherData{
  attributesource:String;
  attributetext:String;
  operationupdate();
  }
// 注意这个JFX类的声明只包括了操作的签名,真正的代码分开定义如下:
 operationWeatherData.update(){
  varcontent=newStringBuffer("");
  dolater{
  varurl=newURL(source);
  varis=url.openStream();
  varreader=newBufferedReader(newInputStreamReader(is));
  varline;
  while(true){
  line=reader.readLine();
  if(line==null){break;
  }
  content.append(line);
  content.append("
");
  }//endwhile
  is.close();
  text=content.toString();
  }//enddolater
  }
/*现在创建窗口来表示用户接口。注意这个Frame被定义成有一个WeatherData类的本地实例。其中的URL是用来获得我所在的县下周的天气预报。*/

Frame{
  varwdata=WeatherData{
  text:"initialized"
  source:"http://forecast.weather.gov/MapClick.php?zoneid=TXZ173&TextType=1"
  }
  title:"WeatherForcast"
  width:400
  height:400
  background:cyan
  content:BorderPanel{
  border:EmptyBorder{top:10left:10bottom:10right:10
  }
  top:Button{
  text:"update"
  action:operation(){wdata.update();}
  height:80
  }
  center:TextArea{text:bindwdata.text
  }
  }//closecontent
  visible:true
  }

当这个按钮被点击之后,更新操作被调用,创建一个线程来执行“do later”中的后续代码来填充文本变量。注意TextArea的文本内容是通过wdata.text变量的“bind”关键字来定义的。当该变量的内容被更新之后,新的文本将自动的出现在窗口当中。

  JFX所缺少的东西

  JFX语言提供的功能当中最明显的缺憾就是少了像处理swing对象一样方便的操纵XML数据的方法。当然你可以创建自己定制的Java类,并在JFX脚本中使用它们,但是如果能够在处理基于XML的Web service中使用XQuery或者XPath的语法,那么就太方便了。

  IDE的支持

  我在NetBeans 5.5和Eclipse IDE中都找到了插件。NetBeans的插件提供了对编辑语法和用法的支持,但是不完全JavaDocs类型的文档。NetBeans插件不支持图形接口版面,但是这应该不是很难增加。另外一个商业的IDE,ReportMill,正在尝试在他们的报表设计编辑器中支持JFX。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics