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.pswp.cn/news/374872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374872.shtml
英文地址,請注明出處:http://en.pswp.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…