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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaFX 2.0和Scala,例如牛奶和饼干

發布時間:2023/12/3 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaFX 2.0和Scala,例如牛奶和饼干 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JavaFX 2.0和Scala都是很好的技術,但是一起使用時效果會更好。 JavaFX 2.0是一種功能強大的富客戶端技術,具有先進的圖形,動畫和媒體功能。 Scala是一種簡單但功能強大的語言,具有用于編寫特定于域的語言(DSL)的高級語言功能。 在您的JavaFX 2.0項目中添加一個Scala UI DSL,您將處在餅干和奶油的天堂! 羅比攝影藝術 授權的延時攝影創意共享

JavaFX彩色圓圈

我將進一步詳細說明為什么Scala,但是我相信所有這些都可以通過代碼示例得到最好的說明。 SDK隨附的JavaFX 2.0功能的基本示例之一是一個名為ColorfulCircles的示例應用程序。 完整的源代碼可以在這里找到:

– Java彩色圓圈代碼

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

– ScalaFX彩色圓圈代碼

更新 :迪恩·艾弗森(Dean Iverson)在GroovyFX中有一個很好的例子,說明了相同的代碼
隨意隨意閱讀源代碼,并注意以下幾點:

1. ScalaFX更簡潔

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

  • 行數:
    • Java:48
  • 字符:
    • Java:1602

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

2. ScalaFX代碼看起來像輸出

雖然“彩色圓圈”示例的輸出非常簡單,但實際上在結構化方式方面隱藏了相當多的復雜性。 這是使用ScalaFX從JavaFX 2.0 Build 45運行的輸出:

您實際看到的是一個由以下幾層組成的SceneGraph:

  • 黑色背景的場景,包含……
    • 包含以下內容的組

在閱讀ScalaFX代碼時,您可以通過場景中節點的對象文字樣式聲明來嵌套該內容,摘錄如下:

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

但是,Java版本沒有為您提供相同的層次結構表示,而是使用了對構造函數,getter和collection方法的命令式調用。

3.量身定制的動畫語法

動畫在創建良好的UI中非常常用,這就是JavaFX Script具有內置結構以簡化動畫創建的原因。 ScalaFX具有類似的語法,使您可以快速輕松地創建動畫,該動畫在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} )

這樣可以輕松創建復雜的動畫。

4. ScalaFX版本具有隱藏的獎金功能…

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

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

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

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

雖然,Java語法中的精確等效代碼實際上如下所示:

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

這些版本中的任何一個都比同等的ScalaFX更復雜和笨拙,這是一個非常簡單的綁定!

關于ScalaFX

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

程序員友好的對象文學類語法

ScalaFX使用簡單的分層模式創建新對象并構建場景圖。 這是一個簡單的示例,該示例使用矩形創建新的舞臺,該矩形根據鼠標事件改變顏色:

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中找到的構建器不同,ScalaFX對象聲明語法使用常規對象API。 這意味著您可以使用相同的運算符和方便的語法來創建和修改場景圖。 同樣,在構造對象時,也可以內聯完成Scala塊中允許的任何事情(例如變量聲明,方法調用,綁定等)。 對于JavaFX構建器,您需要在完成創建對象后聲明綁定,這將導致分離和難以維護的代碼。

自然語言綁定表達式

將Scala語言用作DSL的最大優勢之一是對操作員方法的豐富支持。 這類似于C ++運算符重載的概念,但是在其應用程序中更加統一和簡潔。
ScalaFX綁定庫在所有可綁定對象之上公開了普通運算符,例如&&,||,+,-,*,/。 而且,Scala支持運算符優先級,因此即使您在幕后創建綁定對象,它的外觀也感覺像您在編寫正則表達式。 因此,您具有JavaFX 2.0綁定庫中可用的全部功能,其代碼類似于數學表達式和運算符。
以下是一些可以使用ScalaFX綁定API進行操作的示例: 中綴加/減/乘/除/等

height <== rect1.height + rect2.height

綜合運營商

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

條件表達式

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

復雜的布爾表達式和字符串連接

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

自由格式的無效和變更處理程序

rect.hover onInvalidate {needsRepaint = true }

完全類型安全的API

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

無縫的JavaFX / ScalaFX互操作性

通常情況下,您對代碼庫或包含功能的庫的主要語言沒有完全的自由。 即使在具有Java,Scala以及可能還有其他JVM語言的混合環境代碼庫中,ScalaFX也會無縫地進行轉換和互操作。

ScalaFX通過Scala的隱式運算符功能獲得此功能。 程序在需要JavaFX類型的對象的任何地方,它將自動插入代碼以將ScalaFX包裝的對象轉換為JavaFX本機類。 每當您使用ScalaFX特有的功能時,編譯器都會自動創建一個ScalaFX包裝器對象,使您可以調用高級方法并訪問全部功能。 所有這一切都在幕后發生,使您可以專注于編寫干凈的代碼,而不必大為擔心集成和互操作性。

由于所有這些互操作性魔術都在幕后發生,因此您的應用程序會有一些額外的開銷。 我們已盡力使用Scala語言中的@specialize之類的功能來最小化此問題,這使我們能夠避免在基元上進行裝箱和拆箱。 但是,沒有真正的基準,很難說出我們所做的工作有多好。 希望在以后的文章中對此有更多的了解。

了解有關ScalaFX的更多信息

ScalaFX項目站點由Google Code托管,其中包括幾個郵件列表,如果您有興趣,則應加入該列表:

  • ScalaFX用戶
  • ScalaFX開發人員

在撰寫本文時,我們還沒有捆綁發行的版本,但對早期采用者的反饋感興趣。 如果您想嘗試一下,請下載源代碼并快速旋轉一下!
在即將舉行的Dean Iverson的JavaOne會議上,我將獲得有關ScalaFX的更多詳細信息,標題為“ 帶有替代語言的JavaFX 2.0 ”。 來了解有關Scala,Groovy和其他JVM語言的更多信息,您可以使用它們編寫更簡單,更簡潔的代碼。

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


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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的JavaFX 2.0和Scala,例如牛奶和饼干的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。