JavaFX 2.0 beta示例应用程序和思考

我有一段时间回过头来玩JavaFX,并且在使用该语言方面有好有坏的经验。 随着JavaFX 2.0 beta的发布,我想尝试一下。

在这里,我开发了一个简单的地址解析应用程序,该应用程序将使用Google地址编码API来获取地址并提供该位置的纬度-经度值。

我使用Groovy进行JSON解析,因为最新版本1.8提供了一个非常整洁的json解析支持。

import groovy.json.*class GeocodingParser {static def GEOCODE_JSON_URL = "http://maps.googleapis.com/maps/api/geocode/json"static def GEOCODE_XML_URL = "http://maps.googleapis.com/maps/api/geocode/xml"static def getGeocodeForAddress(address){def queryBuilder = []queryBuilder << "address=${URLEncoder.encode(address)}"queryBuilder << "sensor=false"def queryString = queryBuilder.join("&")def requestUrl = GEOCODE_JSON_URL+"?${queryString}"def payload = new URL(requestUrl).textdef jsonSlurper = new JsonSlurper()def doc = jsonSlurper.parseText(payload)def geocode = new Geocode()geocode.latitude = doc.results.geometry.location.lat.join("")geocode.longitude = doc.results.geometry.location.lng.join("")geocode.locationType = doc.results.geometry.location_type.join("")return geocode}
}class Geocode {def String latitudedef String longitudedef String locationTypedef String toString(){return "Latitude: ${latitude}, Longitude:${longitude} and Location type: ${locationType}"}
}

您可以看到使用JsonSlurper进行的json解析非常简洁。 groovy解析器返回Geocode包装器类中的纬度,经度和位置类型(这些是我们应用程序所关注的值)的值,这也是Grooy Bean。

现在,让我们看一下实际上是本文重点的JavaFX代码:

public class NewFXMain extends Application {/*** @param args the command line arguments*/public static void main(String[] args) {Application.launch(NewFXMain.class, args);}@Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("Geocoder");TabPane mainTabPane = new TabPane();Tab geoTab = new Tab("Geocoding");geoTab.setClosable(false);mainTabPane.getTabs().add(geoTab);final GridPane geoGrid = new GridPane();geoGrid.setHgap(10);geoGrid.setVgap(10);geoGrid.setPadding(new Insets(0, 20, 0, 10));Label mainGeoLabel = new Label("Geocoding");final TextBox geoAddressTextBox = new TextBox(15);Button geoCodeButton = new Button("Geocode");final TextBox latitudeValTextBox = new TextBox();latitudeValTextBox.setEditable(false);final TextBox longitudeValTextBox = new TextBox();longitudeValTextBox.setEditable(false);final TextBox locationTypeValTextBox = new TextBox();locationTypeValTextBox.setEditable(false);final StringProperty latitudeProperty = new StringProperty();latitudeProperty.addListener(new ChangeListener<String>() {@Overridepublic void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {latitudeValTextBox.setText(newValue);}});final StringProperty longitudeProperty = new StringProperty();longitudeProperty.addListener(new ChangeListener<String>() {@Overridepublic void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {longitudeValTextBox.setText(newValue);}});final StringProperty locationTypeProperty = new StringProperty();locationTypeProperty.addListener(new ChangeListener<String>() {@Overridepublic void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {locationTypeValTextBox.setText(newValue);}});geoCodeButton.setOnAction(new EventHandler<ActionEvent>(){@Overridepublic void handle(ActionEvent event) {String address = geoAddressTextBox.getText();if(address == null){}else{Geocode parsedCode = (Geocode)GeocodingParser.getGeocodeForAddress(address);latitudeProperty.set(parsedCode.getLatitude());longitudeProperty.set(parsedCode.getLongitude());locationTypeProperty.set(parsedCode.getLocationType());}}});geoGrid.add(mainGeoLabel, 4, 1);geoGrid.add(new Label("Address"), 2, 3);geoGrid.add(geoAddressTextBox, 3, 3,3,1);geoGrid.add(new Label("Latitude"), 2,7);geoGrid.add(new Label("Longitude"),2,8);geoGrid.add(new Label("Location Type"),2,9);geoGrid.add(latitudeValTextBox,3,7,2,1);geoGrid.add(longitudeValTextBox,3,8,2,1);geoGrid.add(locationTypeValTextBox,3,9,2,1);geoGrid.add(geoCodeButton, 4, 5);geoTab.setContent(geoGrid);Scene scene = new Scene(mainTabPane);primaryStage.setScene(scene);primaryStage.setVisible(true);primaryStage.setResizable(false);}
}

我已经使用绑定来绑定显示纬度,经度和位置类型值的组件以及具有相同值的属性。 例如,以下代码显示了纬度值如何绑定到将显示该值的控件。 该控件(文本框)保存了通过Geocoding API发送的json响应后获得的纬度值。

现在,我们创建一个StringProperty来保存纬度的值,并将更改侦听器附加到此属性,以使该属性中的值一旦更新,便会使用新值更新文本框。 那么,到底是什么改变了这个财产的价值? 我们添加一个按钮,该按钮调用groovy解析器并在包装类中获取纬度,经度和位置类型值。 在上面的动作侦听器中,我们获取已解析的值,然后使用相应的值更新属性。 此更新依次触发相应的更改侦听器中的方法。

现在进入控件的布局。 我使用了GridBox布局,这非常灵活,因为它使我能够以整齐的顺序放置组件。

以下是一些想法:

  • JavaFX 2.0已更改,以使Java程序员更加友好
  • JavaFX 2.0比JavaFX脚本更为冗长-例如:研究必须完成绑定的方式。
  • 缺乏工具支持–创建GUI很困难。
  • Java程序员不必一起学习新的语言,他们对JavaFX API感到很宾至如归
  • 与其他JVM语言(如Groovy,Scala)的互操作性。
  • JavaFX 2.0中添加了许多新控件,API。
  • 缺乏多平台支持。

源代码可以在这里找到。

参考: 使用JavaFX 2.0 beta的示例应用程序以及 JCG合作伙伴 Mohamed Sanaulla在Experiences Unlimited Blog上的 想法 。

相关文章 :
  • Xuggler开发教程
  • YouTube Java API入门
  • SmartGWT入门,提供出色的GWT界面

翻译自: https://www.javacodegeeks.com/2011/06/javafx-20-beta-sample-application-and.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

$Android自定义控件在不同状态下的属性

在写代码的时候&#xff0c;有时候需要控件在不同状态下显示不同的外观&#xff0c;比如在按钮按下的时候要变颜色&#xff0c;EditText获取焦点时候边框要变颜色等。那么下面就来梳理一下这些是怎么实现的。 &#xff08;一&#xff09;按钮按下时候变颜色 1、在项目的drawabl…

解析DBR操作系统引导记录数据

理解文件系统。你必须要熟悉DBR&#xff0c;下面我们就来看看文件系统解析DBR数据。 Dos Boot Record(DBR)操作系统引导记录是由操作系统的格式化程序建立的。在文件系统驱动操作不论什么一个磁盘卷时&#xff0c;这一部分的信息将被读取并作为文件系统在这个磁盘卷上的參数被使…

简单冒泡排序

将5个数字按从小到大排序。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main() {int x[5] {0},temp 0;for(int i 0;i<5;i){scanf("%d",&x[i]);}//冒泡排序&#xff08;升序&#xff09;for(int j 0;j<4;j)//n个…

YouTube Java API入门

在本教程中&#xff0c;我将介绍Google的YouTube API &#xff0c;该API可让您使用YouTube的功能来启用应用程序。 YouTube是“杀手级”互联网应用程序之一&#xff0c;其流量占互联网总流量的很大一部分。 在开始之前&#xff0c;请确保您已阅读《 API概述指南》 。 我们将主…

mysql在mac上的坑

默认端口3306&#xff1f; 正确答案&#xff1a;3307 转载于:https://www.cnblogs.com/dudream/p/5375551.html

ServletContext图解

servlet之间共享数据资源&#xff01; 转载于:https://www.cnblogs.com/felixzh/p/4615902.html

C语言怎么输出百分号%

规律&#xff1a;printf函数中&#xff0c;当出现多个%时&#xff0c;由左至右&#xff0c;每两个%结合输出一个% #include <stdio.h> #include <stdlib.h> #include <math.h> int main() {int c 52;printf("% \n %% \n %%% \n %%%% \n %%%%% \n %%%%…

入侵Jasper以获取JSP页面的对象模型

为了对我的JSP进行一些检查和统计分析&#xff0c;我需要一个包含在其中的元素的类似于DOM的层次模型。 但是&#xff0c;解析JSP页面并不是一件容易的事&#xff0c;最好留给它一个出色的工具-Tomcat&#xff0c;Jetty&#xff0c;GlassFish以及其他所有工具都可以使用Jasper …

Linux自动化安装cobbler

1介绍 1.1 PXE PXE技术与RPL技术不同之处为RPL是静态路由&#xff0c;PXE是动态路由。RPL是根据网卡上的ID号加上其他记录组成的一个Frame&#xff08;帧&#xff09;向服务器发出请求。而服务器中已有这个ID数据&#xff0c;匹配成功则进行远程启动。PXE则是根据服务器端收到的…

iOS9适配系列教程

https://github.com/ChenYilong/iOS9AdaptationTips 转载于:https://www.cnblogs.com/zsw-1993/p/4879118.html

C语言形参

形参和实参区别 形参出现在函数定义中&#xff0c;在整个函数体内都可以使用&#xff0c;离开该函数则不能使用。实参出现在主调函数中&#xff0c;进入被调函数后&#xff0c;实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时&#xff0c;主调函数把实参…

避免延迟的JPA集合

Hibernate&#xff08;实际上是JPA&#xff09;具有集合映射&#xff1a; OneToMany&#xff0c; ManyToMany&#xff0c; ElementCollection。 所有这些默认情况下都是惰性的。 这意味着集合是List或Set接口的特定实现&#xff0c;其中包含对持久会话的引用&#xff0c;并且只…

2016年,我的和自己谈谈

2016年过去三分之一了&#xff0c;现在谈规划晚点但总比没想法强。想了半天还是从这个方面着手吧&#xff1a; 一.升级改造自己的办公学习环境&#xff1a; 给自己的电脑加内存&#xff0c;加SSD&#xff0c;再添置一个显示器&#xff0c;换上心仪已久的cherry青轴键盘&#xf…

C语言的四舍五入实现

习题3-2 高速公路超速处罚 (15 分) 按照规定&#xff0c;在高速公路上行使的机动车&#xff0c;达到或超出本车道限速的10%则处200元罚款&#xff1b;若达到或超出50%&#xff0c;就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。 输入格式: 输入在一行中…

ACTGame项目

项目地址&#xff1a;https://github.com/alonecat06/ACTGame游戏地址&#xff1a;http://pan.baidu.com/s/1hqD3IYw 项目是一个自制单机动作游戏demo&#xff0c;方向是手游&#xff0c;使用Unity5&#xff0c;5月中开工至今。 做这个项目&#xff0c;是为加深自己对Unity的理…

Xuggler教程:帧捕获和视频创建

注意&#xff1a;这是我们的“ Xuggler开发教程 ”系列的一部分。 到目前为止&#xff0c;在我们的Xuggler教程系列中&#xff0c;我们已经对视频处理的Xuggler进行了介绍&#xff0c;并讨论了转码和媒体修改 。 在本教程中&#xff0c;我们将看到如何解码视频和捕获帧&#xf…

面向对象-原型对象

创建对象 Js中可以用构造函数模式创建对象&#xff0c;如&#xff1a; function Person(name, age, job) {this.name name;this.age age;this.job job;this.sayName function () {alert(this.name);}}var person1 new Person("Nicholas", 29, "aa");v…

索引类型

1.B树索引 在Oracle中是通用索引&#xff0c;是创建索引时的默认索引。B树索引可以是单列索引&#xff0c;也可以是组合/复合索引。B树索引最多可以包括22列。 2.位图索引 位图索引时决策支持系统&#xff08;DSS&#xff09;和数据仓库的理想选择&#xff0c;它们不应该用于事…

C语言条件运算符

先看一个error error: lvalue required as left operand of assignment| i 0 ? X 1.0 : X * x;修改后 i 0 ? (X 1.0) : (X * x);也就是说条件运算符可以执行语句&#xff0c;当是赋值语句时要加括号规定优先级&#xff0c;不然会干扰程序判断。 因为条件运算符作为三目…

EJB 3.0注入和查找简介

介绍 Enterprise JavaBeans Specification v。3.0引入了简化的&#xff0c;基于注释的API&#xff0c;用于EJB注入和查找。 EJB 3.0现在是POJO&#xff0c;可以使用简单的注释将其注入其他组件&#xff08;例如EJB和Servlet&#xff09;。 EJB 3.0是Java EE 6的许多其他基于POJ…