日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

JavaFX 2.0和Scala,像牛奶和饼干

發(fā)布時(shí)間:2023/12/3 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaFX 2.0和Scala,像牛奶和饼干 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JavaFX 2.0和Scala都是很好的技術(shù),但是一起使用時(shí)效果會(huì)更好。 JavaFX 2.0是一種功能強(qiáng)大的富客戶端技術(shù),具有先進(jìn)的圖形,動(dòng)畫(huà)和媒體功能。 Scala是一種簡(jiǎn)單但功能強(qiáng)大的語(yǔ)言,具有用于編寫(xiě)特定于域的語(yǔ)言(DSL)的高級(jí)語(yǔ)言功能。 將少量Scala UI DSL添加到JavaFX 2.0項(xiàng)目中,您將處在餅干和奶油的天堂! 羅比攝影藝術(shù) 授權(quán)的延時(shí)攝影創(chuàng)意共享地帶

JavaFX彩色圓圈

我將稍微詳細(xì)說(shuō)明為什么Scala,但是我相信所有這些都可以通過(guò)代碼示例得到最好的說(shuō)明。 SDK隨附的JavaFX 2.0功能的基本示例之一是一個(gè)名為ColorfulCircles的示例應(yīng)用程序。 完整的源代碼可以在這里找到:

– Java彩色圓圈代碼

在Sven Reimers的幫助下,我們將其移植到了ScalaFX庫(kù)頂部的Scala中。 可在此處找到可用的應(yīng)用程序源:

– ScalaFX彩色圓圈代碼

更新 :Dean Iverson在GroovyFX中有一個(gè)很好的例子,說(shuō)明了相同的代碼
隨意隨意閱讀源代碼,并注意以下幾點(diǎn):

1. ScalaFX更簡(jiǎn)潔

ScalaFX版本的行數(shù)和字符數(shù)都更短。
代碼計(jì)數(shù)(不包括許可證和進(jìn)口):

  • 行數(shù):
    • Java:48
  • 字符:
    • Java:1602

這是由于定制量身定制的DSL語(yǔ)言具有完整的表現(xiàn)力和較少的冗余。 在Java版本的代碼中,您會(huì)注意到該語(yǔ)言所需的更多樣板和語(yǔ)法重復(fù)。

2. ScalaFX代碼看起來(lái)像輸出

雖然“彩色圓圈”示例的輸出非常簡(jiǎn)單,但實(shí)際上在結(jié)構(gòu)化方式方面隱藏了相當(dāng)多的復(fù)雜性。 這是使用ScalaFX從JavaFX 2.0 Build 45運(yùn)行的輸出:

您實(shí)際看到的是一個(gè)由以下幾層組成的SceneGraph:

  • 黑色背景的場(chǎng)景,包含……
    • 包含以下內(nèi)容的組

在閱讀ScalaFX代碼時(shí),您可以通過(guò)場(chǎng)景中節(jié)點(diǎn)的對(duì)象文字樣式聲明來(lái)嵌套該內(nèi)容,摘錄如下:

// ScalaFX Scene Excerpt: scene = new Scene {content = Seq(new Group {circles = for (i <- 0 until 30) yield new Circle { ... }}new Rectangle { ... }) }

但是,Java版本沒(méi)有為您提供相同的層次結(jié)構(gòu)表示,而是使用了對(duì)構(gòu)造函數(shù),getter和collection方法的命令式調(diào)用。

3.量身定制的動(dòng)畫(huà)語(yǔ)法

動(dòng)畫(huà)在創(chuàng)建良好的UI時(shí)非常常用,這就是JavaFX Script具有內(nèi)置結(jié)構(gòu)以簡(jiǎn)化動(dòng)畫(huà)創(chuàng)建的原因。 ScalaFX具有類似的語(yǔ)法,使您可以快速輕松地創(chuàng)建動(dòng)畫(huà),該動(dòng)畫(huà)在ColorfulCircles示例中使用:

Seq(at(0 s) {circle.centerX -> random * 800},at(0 s) {circle.centerY -> random * 600},at(40 s) {circle.centerX -> random * 800},at(40 s) {circle.centerY -> random * 600} )

這樣可以輕松創(chuàng)建復(fù)雜的動(dòng)畫(huà)。

4. ScalaFX版本具有隱藏的獎(jiǎng)金功能…

與JavaFX版本不同,內(nèi)容綁定到舞臺(tái)的寬度和高度。 ScalaFX中的綁定就像用綁定運(yùn)算符(<==)替換賦值運(yùn)算符(=)一樣簡(jiǎn)單,如下所示:

// ScalaFX Property Setting: width <== scene.width height <== scene.height

盡管這是ScalaFX中操作員的簡(jiǎn)單更改,但它需要足夠復(fù)雜的代碼,因此他們決定從JavaFX示例中忽略它。 下面是對(duì)Java的寬松翻譯:

// Java Fixed Property Binding colors.widthProperty().bind(scene.widthProperty()) colors.heightProperty().bind(scene.heightProperty())

雖然,Java語(yǔ)法中的精確等效代碼實(shí)際上如下所示:

// Java Dynamic Property Binding colors.widthProperty().bind(Bindings.selectDouble(primaryStage.sceneProperty(), "width")) colors.heightProperty().bind(Bindings.selectDouble(primaryStage.sceneProperty(), "height"))

這些版本中的任何一個(gè)都比同等的ScalaFX更復(fù)雜和笨拙,這是用于非常簡(jiǎn)單的綁定!

關(guān)于ScalaFX

ScalaFX是用Scala語(yǔ)言編寫(xiě)的UI DSL,它位于JavaFX 2.0之上(不要與Ingo Maier在Swing的功能性反應(yīng)式編程方面 的出色工作相混淆)。 這意味著每個(gè)ScalaFX應(yīng)用程序也是一個(gè)有效的Scala應(yīng)用程序。 通過(guò)擴(kuò)展,它支持與Java的完全互操作性,并且可以在支持Java虛擬機(jī)(JVM)和JavaFX 2.0的任何地方運(yùn)行。
ScalaFX的一些功能包括:

程序員友好的對(duì)象文學(xué)類語(yǔ)法

ScalaFX使用簡(jiǎn)單的分層模式創(chuàng)建新對(duì)象并構(gòu)建場(chǎng)景圖。 這是一個(gè)簡(jiǎn)單的示例,該示例創(chuàng)建一個(gè)具有矩形的新舞臺(tái),該矩形會(huì)根據(jù)鼠標(biāo)事件更改顏色:

stage = new Stage {title.value = "Hello Stage"width = 600height = 450scene = new Scene {fill = Color.LIGHTGREENcontent = new Rectangle {x = 25y = 40width = 100height = 100fill <== when (hover) then Color.GREEN otherwise Color.RED}}visible = true }

與您在核心JavaFX API中找到的構(gòu)建器不同,ScalaFX對(duì)象聲明語(yǔ)法使用常規(guī)對(duì)象API。 這意味著您可以使用相同的運(yùn)算符和方便的語(yǔ)法來(lái)創(chuàng)建和修改場(chǎng)景圖。 同樣,在構(gòu)造對(duì)象時(shí),也可以內(nèi)聯(lián)完成Scala塊中允許的任何事情(例如變量聲明,方法調(diào)用,綁定等)。 對(duì)于JavaFX構(gòu)建器,您需要在完成創(chuàng)建對(duì)象后聲明綁定,這將導(dǎo)致分離和難以維護(hù)的代碼。

自然語(yǔ)言綁定表達(dá)式

將Scala語(yǔ)言用作DSL的最大優(yōu)勢(shì)之一是對(duì)操作員方法的豐富支持。 這類似于C ++運(yùn)算符重載的概念,但是在其應(yīng)用程序中更加統(tǒng)一和簡(jiǎn)潔。
ScalaFX綁定庫(kù)在所有可綁定對(duì)象的頂部公開(kāi)了常規(guī)運(yùn)算符,例如&&,||,+,-,*,/。 而且,Scala支持運(yùn)算符優(yōu)先級(jí),因此即使您在幕后創(chuàng)建綁定對(duì)象,它的外觀也感覺(jué)像您在編寫(xiě)正則表達(dá)式。 因此,您具有JavaFX 2.0綁定庫(kù)中可用的全部功能,其代碼類似于數(shù)學(xué)表達(dá)式和運(yùn)算符。 以下是一些可以使用ScalaFX綁定API進(jìn)行操作的示例: 中綴加/減/乘/除/等

height <== rect1.height + rect2.height

綜合運(yùn)營(yíng)商

width <== max(rect1.width, rect2.width, rect3.width)

條件表達(dá)式

color <== when (hover) then Color.GREEN otherwise Color.RED

復(fù)雜的布爾表達(dá)式和字符串連接

text <== when (rect.hover || circle.hover && !disabled) then textField.text + " is enabled" otherwise "disabled"

自由格式的無(wú)效和變更處理程序

rect.hover onInvalidate {needsRepaint = true }

完全類型安全的API

這似乎似乎無(wú)關(guān)緊要……類型安全性是Java開(kāi)發(fā)人員一直擁有的(并且常常認(rèn)為是理所當(dāng)然的),而使用其他腳本語(yǔ)言的開(kāi)發(fā)人員則沒(méi)有(并且在不知不覺(jué)中遭受運(yùn)行時(shí)錯(cuò)誤的困擾)。 但是,如果要開(kāi)發(fā)的應(yīng)用程序在部署后不會(huì)出現(xiàn)意外的運(yùn)行時(shí)錯(cuò)誤和錯(cuò)誤,則此功能至關(guān)重要。
一個(gè)好的編譯器將能夠通過(guò)比較預(yù)期類型和實(shí)際類型來(lái)發(fā)現(xiàn)許多常見(jiàn)的編碼錯(cuò)誤,而一個(gè)好的編譯器(例如Scala)將為您自動(dòng)推斷類型,因此您不必在整個(gè)代碼中繁瑣地重復(fù)它們。
ScalaFX通過(guò)類似腳本的DSL語(yǔ)法獲得了兩全其美的優(yōu)勢(shì),您幾乎不需要顯式地鍵入對(duì)象,而Scala編譯器具有強(qiáng)大的類型安全性,可以推斷并檢查每個(gè)表達(dá)式和API調(diào)用的類型。 這意味著更少的時(shí)間花費(fèi)在調(diào)試怪異的代碼錯(cuò)誤和拼寫(xiě)錯(cuò)誤上,而質(zhì)量更高的代碼馬上就可以使用了!

無(wú)縫的JavaFX / ScalaFX互操作性

通常情況下,您對(duì)代碼庫(kù)或包含功能的庫(kù)的主要語(yǔ)言沒(méi)有完全的自由。 即使在具有Java,Scala以及可能還有其他JVM語(yǔ)言的混合環(huán)境代碼庫(kù)中,ScalaFX也會(huì)無(wú)縫地進(jìn)行轉(zhuǎn)換和互操作。

ScalaFX通過(guò)Scala的隱式運(yùn)算符功能獲得此功能。 程序在需要JavaFX類型的對(duì)象的任何地方,它將自動(dòng)插入代碼以將ScalaFX包裝的對(duì)象轉(zhuǎn)換為JavaFX本機(jī)類。 每當(dāng)您使用ScalaFX特定功能時(shí),編譯器都會(huì)自動(dòng)創(chuàng)建一個(gè)ScalaFX包裝器對(duì)象,該對(duì)象可用于調(diào)用高級(jí)方法并訪問(wèn)全部功能。 所有這一切都在幕后發(fā)生,使您可以專注于編寫(xiě)簡(jiǎn)潔的代碼,而不必大為擔(dān)心集成和互操作性。

由于所有這些互操作性魔術(shù)都在幕后發(fā)生,因此您的應(yīng)用程序會(huì)有一些額外的開(kāi)銷。 我們已盡力使用Scala語(yǔ)言中的@specialize之類的功能來(lái)最小化此問(wèn)題,這使我們能夠避免在基元上進(jìn)行裝箱和拆箱。 但是,沒(méi)有真正的基準(zhǔn),很難說(shuō)出我們所做的工作有多好。 希望在以后的文章中對(duì)此有更多的了解。

了解有關(guān)ScalaFX的更多信息

ScalaFX項(xiàng)目站點(diǎn)由Google Code托管,其中包括一些郵件列表,如果您有興趣,則應(yīng)加入該列表:

  • ScalaFX用戶
  • ScalaFX開(kāi)發(fā)人員

在撰寫(xiě)本文時(shí),我們還沒(méi)有捆綁發(fā)行版,但對(duì)早期采用者的反饋感興趣。 如果您想嘗試一下,請(qǐng)下載源代碼并快速旋轉(zhuǎn)一下!
在即將舉行的Dean Iverson的JavaOne研討會(huì)上,我將獲得有關(guān)ScalaFX的更多詳細(xì)信息,主題為“ 帶有替代語(yǔ)言的JavaFX 2.0 ”。 來(lái)聽(tīng)聽(tīng)有關(guān)Scala,Groovy和其他JVM語(yǔ)言的更多信息,您可以使用它們編寫(xiě)更簡(jiǎn)單,更簡(jiǎn)潔的代碼。

參考: JavaFX 2.0和Scala,例如來(lái)自我們JCG合作伙伴的 牛奶和餅干 ? Steve On Java博客上的Stephen Chin。


翻譯自: https://www.javacodegeeks.com/2012/02/javafx-20-and-scala-like-milk-and.html

總結(jié)

以上是生活随笔為你收集整理的JavaFX 2.0和Scala,像牛奶和饼干的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。