2009-06-23 61 views

回答

5

Intellij在支持混合Java/Scala項目方面做得很好。目前Intellij中的Scala支持對於我來說比對Eclipse更好的Scala IDE。 (我曾經是一個很久以前的Eclipse用戶,最近在其他一些Scala編碼人員的推薦下嘗試了Intellij)。

1

您是否試過Scala的Swing包裝?這是非常輕量級的,因爲你總是可以訪問底層的Swing類,但它非常深思熟慮。我發現它令人愉快地工作着 - 在反應模式使得事件處理變得更輕鬆和演員的框架,使事件的傳播比使用的PropertyChangeSupport所以更清晰

這是完全有可能與自己的自定義使用它擺動小部件。

+0

我試圖從斯卡拉本書的示例程序,但我發現它從我多年的悠久Swing GUI的開發經驗也不同。 – akarnokd 2009-06-23 08:12:32

+0

我一直在編寫Swing 10年 - 給Scala一個機會! – 2009-06-23 13:21:14

+0

我認爲學習scala編程和actor框架的方法已經足夠了,並且避免了Scala GUI開發實踐差異導致的混淆,因爲我正在同時處理其他幾個Swing GUI編輯項目。 – akarnokd 2009-06-26 09:04:06

21

Eclipse的「官方」Scala插件允許您將「scala自然」添加到任何項目中,以及java本質。這可以讓你根據自己的意願進行混搭。

昨天晚上我第一次玩scala,使用Eclipse IDE,效果很好。


而且,我只是碰到這種文章跑:http://www.codecommit.com/blog/scala/joint-compilation-of-scala-and-java-sources

似乎scalac知道有足夠的瞭解Java成爲能夠解決的Java源代碼的依賴關係,而不實際編譯它們。很聰明。

+2

不錯。這項合作是否適用於雙方的javadoc/scaladoc? – akarnokd 2009-06-23 09:10:06

0

Scala plugins for NetBeans也做得很好。隨着NetBeans的Swing開發變得如此簡單,它可能就是你正在尋找的東西:)

1

我已經在我的應用程序中成功地混合了Java和Scala。它在Goggle App Engine中運行,並使用Spring MVC作爲UI。 (稍後將端口提升)

Intellij的插件是一個很好的幫助。雖然現在還很早,偶爾也會出現問題。 (例如,Scala插件編譯器似乎不太喜歡JDO增強的Java類......有一個解決方法,我相信這個錯誤很快就會被修復)。

我發現有關混合的唯一乏味的事情就是處理在Java中返回Java集合類的Java API。它非常笨重,你必須稍稍跳過籃球。

2

混合JAVA(Netbeans的圖形用戶界面的生成器)和Scala擺幅:

我剛剛創建與GUI-Builder和一些控制和簡單的邏輯的新JPanel。

然後創建一個階對象一樣出現在斯卡拉擺幅教程:

object MySampleView extends Frame { title = "SomeTitle" ... 

然後我添加了新JPanel的內容:

contents = new Component { override lazy val peer = new MySampleJPanel() } 

當編譯項目中,我看到的每一個變化GUI-Builder Cool中的JPanel。

0

太棒了!感謝您分享這個想法。

爲了補充,下面的代碼使用了GUI編輯器(我使用WindowBuilder + Eclipse + Scala插件)​​來設計GUI,然後使用Scala完成其他一切。現在可以使用Java Swing GUI編輯器並在Scala中進行所有編程。

import swing._ 
import event._ 
object TestApp extends Frame { 
def main(args: Array[String]): Unit = { 
    title = "Scala Swing Test App" 
    val gui = new MyTestPanel() // a JPanel class from the GUI Editor 
    val button = new Button {override lazy val peer = gui.getBtnMyButton()} 
      // getBtnMyButton() is generated in the Gui Editor (Expose Component) 
    contents = new Component{ override lazy val peer = gui } 
    this.listenTo(button) 
    reactions += { 
     case ButtonClicked(b) => println("BUTTON CLICK.") 
    } 
    this.visible = true 
} } 

Mvackel

相關問題