2010-07-24 28 views
28

Lần trước tôi phải đối phó với Java là năm 2005 và tôi đã quên gần như mọi thứ về nó kể từ đó.GUI trong Scala/Groovy/Clojure

Hôm nay tôi cần xây dựng một ứng dụng GUI trên đầu Java. Tôi đoán tốt hơn là sử dụng một trong các ngôn ngữ Scala/Groovy/Clojure.

Câu hỏi là: câu hỏi nào trong số đó tốt hơn cho lập trình GUI trên máy tính để bàn? Chương trình của tôi sẽ biến đổi và hiển thị một loạt các tập tin jpeg/png + sẽ có ~ 10 hộp thoại (với tấn tùy chọn trong mỗi với tất cả các widget có thể).

Yêu cầu chính là nhỏ gọn: Tôi ghét phải viết một tá dòng mã chỉ để vẽ một khung đơn giản bằng một nút. Nền của tôi trong GUI là (chủ yếu) Tcl/Tk và GTK +.

Trả lời

18

Scala đi kèm với các ứng dụng mẫu khá hoàn chỉnh cho các phần tử GUI cơ bản, bạn có thể chạy bằng cách gõ scala scala.swing.test.UIDemo tại dòng lệnh. Bạn có thể duyệt mã nguồn cho chúng here.

Bạn cũng có thể xem this document để có ý tưởng về các nguyên tắc thiết kế đằng sau trình bao bọc Swing của Scala.

+0

A) Cảm ơn bạn đã có ít trứng Phục sinh về bản demo UI. Tôi không có ý tưởng nào tồn tại. Nguồn đó có sẵn không? B) Tôi bắt đầu sử dụng trình bao bọc Scala swing vào cuối tuần này sau khoảng năm năm trải nghiệm Java swing tiêu chuẩn. Có nhiều hơn một chút đường cong học tập; nó có thể dễ dàng hơn nếu bạn mới làm quen với lập trình GUI. Tôi sẽ làm một bài đăng trên blog sớm làm nổi bật một số khác biệt. – I82Much

+0

@ I82Much Câu trả lời có liên kết đến mã nguồn. Nó cũng đi kèm với các bản phân phối Scala tiêu chuẩn - bao gồm mã nguồn cho trình biên dịch và các thư viện - và có thể thu được cũng như với git và subversion. –

+1

@ I82Much Ngoài ra, tôi rất muốn thấy bài đăng trên blog đó. Tôi nghĩ Scala thiếu các bài đăng trên blog về lập trình GUI. –

20

KHUYẾN CÁO: Tôi là lập trình viên của Clojure. Tôi rõ ràng là thiên vị.

Trong tất cả các ngôn ngữ đó, tôi nghĩ Clojure và Groovy có lẽ là nhỏ gọn nhất. Scala là một ngôn ngữ ngoặc nhọn như Java, vì vậy nó có xu hướng chiếm nhiều không gian hơn một chút. Tuy nhiên, nó không có gì gần như dài dòng như Java, và tôi nghĩ Scala khá tuyệt vời. Tôi biết rằng Scala có một wrapper swing. Tôi chưa bao giờ thực hiện phát triển GUI ở Scala, vì vậy tôi thực sự không thể nói cảm giác đó như thế nào.

Tôi đã thực hiện một số phát triển xoay trong Clojure, và nó không thực sự mất nhiều. Sử dụng swing trực tiếp từ Clojure có thể tẻ nhạt cho đến khi bạn viết cho mình một số trừu tượng, nhưng hoàn toàn, các ứng dụng swing nhỏ hơn cùng một thứ trong Java vì mã Clojure có xu hướng ngắn hơn và ngắn gọn hơn mã Java.

Clojure cũng có một số trình bao bọc các loại để làm cho phát triển swing thêm Clojury. Một trong số đó là clj-swing. Tôi đã nhìn thấy một số mã được viết bằng cách sử dụng nó, và nó khá mát mẻ, và chắc chắn ngắn gọn hơn so với interop trực tiếp.

Bây giờ, tôi không biết Groovy. Tôi thực sự không biết nhiều về nó, nhưng tôi biết nó nhỏ gọn hơn Java, vì vậy tôi tưởng tượng việc phát triển GUI cũng khá nhỏ gọn.

Tôi nghĩ Clojure là một cược an toàn. Với clj-swing, hoặc thậm chí trực tiếp bằng cách sử dụng bộ công cụ Java GUI trực tiếp sẽ thực sự nhỏ gọn so với Java, và khả năng xây dựng trừu tượng qua những thứ không nhỏ gọn với các macro chắc chắn là một điểm cộng lớn. Clojure có phiếu bầu của tôi.

+0

Cá nhân, tôi cho rằng Clojure quá tối nghĩa và chưa trưởng thành đối với mã sản xuất cần được duy trì trong một thời gian dài bởi nhiều nhà phát triển (mặc dù tôi không biết nếu điều đó áp dụng cho dự án này). Tôi không nói đó là một ngôn ngữ tốt/xấu, nhưng nó quá khác với Java cho một nhà phát triển Java để dễ dàng chọn nó. –

+7

Nếu anh ta có tùy chọn các ngôn ngữ này tại nơi làm việc, rõ ràng là họ không cảm thấy nó quá "mơ hồ và chưa trưởng thành đối với mã sản xuất". Tôi nghĩ bạn nên để anh ấy quyết định, vì đó là ứng dụng của anh ấy. Ngoài ra, tôi biết một số công ty sử dụng Clojure là/một trong những ngôn ngữ chính của họ, và tự hào về nó. – Rayne

+1

Tôi đã sử dụng bập bênh (https://github.com/daveray/seesaw) trước đây, nó cực kỳ nhỏ gọn và thanh lịch. Nó cũng chơi rất độc đáo với cấu trúc dữ liệu của Clojure, cho phép liên kết dễ dàng giữa các nguyên tử và các thành phần xoay theo cả hai hướng. – deterb

4

Tôi hiện đang phát triển một ứng dụng SWT ở Scala và khá giống nó. Nhưng tôi hy vọng Clojure sẽ nhỏ gọn hơn.

9

Groovy có khung công tác Griffon sử dụng quy ước về cấu hình để xây dựng ứng dụng GUI trên JVM. Nó tương tự như grails/rails nhưng đối với một GUI phong phú hơn là một ứng dụng web.

+0

Tôi không biết mutch về griffon nhưng không ngày nói rằng họ muốn có wrappers cho jruby và clojure? Hãy nhớ nghe một cái gì đó như thế. – nickik

+0

Griffon hỗ trợ lập trình đa ngôn ngữ thông qua các plugin Groovy, Java, Clojure, Scala, Mirah, Jython là một số ngôn ngữ bạn có thể sử dụng với nó. – aalmiray

3

Tôi đã viết GUI bằng cách sử dụng Clojure trực tiếp với Swing. Nó đã làm việc rất tốt thực sự cho đến nay. Tôi cũng đã viết một số thành phần giao diện người dùng tùy chỉnh trong Java đã chứng tỏ rất dễ tích hợp với phần Clojure của cơ sở mã.

Tôi cũng nghĩ rằng clj-swing trông rất tuyệt - có thể dễ dàng hơn so với sử dụng Swing trực tiếp nếu bạn không có trải nghiệm Swing trước.

7

Groovy có thứ gọi là swing builder để giúp lập trình GUI dễ dàng hơn. Dưới đây là một đoạn mã mẫu từ trang web groovy, nó tạo một khung bằng một nút và đếm số lần bạn nhấp vào nút đó:

int count = 0 
new SwingBuilder().edt { 
    frame(title:'Frame', size:[300,300], show: true) { 
    borderLayout() 
    textlabel = label(text:"Click the button!", constraints: BL.NORTH) 
    button(text:'Click Me', 
     actionPerformed: {count++; textlabel.text = "Clicked ${count} time(s)."; println "clicked"}, 
     constraints:BL.SOUTH) 
    } 
}