2010-07-24 5 views
28

자바를 다루어야했던 마지막 시간은 2005 년이었고 그 이후로 거의 모든 것을 잊어 버렸습니다.스칼라/그루비/Clojure의 GUI

오늘 Java 위에 GUI 응용 프로그램을 빌드해야합니다. Scala/Groovy/Clojure 언어 중 하나를 사용하는 것이 더 낫다고 생각합니다.

질문은 : 데스크탑 GUI 프로그래밍에서 더 우수합니까? 내 프로그램은 일련의 jpeg/png 파일을 변환하고 표시합니다 ~ 10 개의 대화 상자가 나타납니다 (가능한 모든 위젯이있는 각각의 옵션이 있습니다).

주요 요구 사항은 간단합니다. 단추가있는 간단한 프레임을 그리기 위해서만 12 줄의 코드를 작성하는 것을 싫어합니다. GUI에서 내 배경은 (주로) Tcl/Tk와 GTK +이다.

답변

18

스칼라는 기본 GUI 요소에 대해 매우 완전한 샘플 응용 프로그램을 제공합니다.이 응용 프로그램은 명령 줄에 scala scala.swing.test.UIDemo을 입력하여 실행할 수 있습니다. 그들 here에 대한 소스 코드를 검색 할 수 있습니다.

또한 this document을 보면 스칼라의 스윙 래퍼 ​​뒤에있는 디자인 원리를 알 수 있습니다.

+0

A) UI 데모에 대한 작은 부활절 달걀을 가져 주셔서 감사합니다. 나는 그 존재를 전혀 몰랐다. 해당 소스를 사용할 수 있습니까? B) 표준 자바 스윙 경험이있는 약 5 년 후에 Scala 스윙 랩퍼를 이번 주말에 사용하기 시작했습니다. 약간의 학습 곡선이 있습니다. GUI 프로그래밍을 처음 접한다면 더 쉬울 것입니다. 곧 다른 점을 강조하는 블로그 게시물을 작성하게 될 것입니다. – I82Much

+0

@ I82Much 대답은 소스 코드에 대한 링크가 있습니다. 또한 컴파일러와 라이브러리 용 소스 코드가 포함 된 표준 스칼라 배포판이 있어야하며 git 및 subversion을 사용하여 얻을 수도 있습니다. –

+1

@ I82Much 또한 블로그 게시물을보고 싶습니다. Scala는 GUI 프로그래밍에 대한 블로그 게시물이 부족하다고 생각합니다. –

20

면책 조항 : 저는 Clojure 프로그래머입니다. 나는 분명히 편향되어있다.

이 모든 언어 중 Clojure와 Groovy가 아마도 가장 컴팩트하다고 생각합니다. 스칼라는 자바와 같은 중괄호 (curly-bracket) 언어이기 때문에 조금 더 많은 공간을 차지한다. 그러나 자바만큼이나 자세한 것은 어디에도 없습니다. 스칼라가 꽤 멋지다고 생각합니다. 나는 스칼라가 스윙 래퍼를 가지고 있다는 것을 알고있다. 나는 스칼라에서 GUI 개발을 해 본 적이 없기 때문에 실제로 어떻게 느끼는지 말할 수는 없다.

Clojure에서 스윙 개발을 해봤지만 실제로 많이 사용하지는 않습니다. Clojure에서 직접 스윙을 사용하는 것은 다소 추상적 일 때까지 지루할 수 있지만 Clojure 코드는 Java 코드보다 짧고 간결하기 때문에 스윙 애플리케이션은 Java에서 동일한 것보다 작다.

Clojure에는 스윙 개발을 더 많이하는 Clojury의 래퍼가 있습니다. 그 중 하나는 clj-swing입니다. 필자는 그것을 사용하여 작성된 코드를 보았습니다.이 코드는 직접 상호 운용성보다 훨씬 깔끔하고 간결합니다.

이제 Groovy에 대해 알지 못합니다. 정말 그것에 대해 많은 것을 알지 못합니다.하지만 Java보다 더 작기 때문에 GUI 개발이 상당히 컴팩트 할 것이라고 생각합니다.

나는 Clojure가 안전한 내기라고 생각한다. clj-swing을 사용하거나 직접 Java GUI 툴킷을 직접 사용하는 것은 Java와 비교할 때 실제로 컴팩트하게 될 것이며, 매크로가 아닌 비 압축 구성 요소에 대한 추상화 기능은 확실히 큰 장점입니다. Clojure가 내 표를 가지고 있습니다.

+0

을 개인적으로 Clojure의 생산 코드를 너무 모호하고 미숙 생각 할 수있다 많은 개발자들이 오랫동안 유지해야 할 필요가 있습니다 (이 프로젝트에 적용되는지는 모르겠지만). 좋은/나쁜 언어라고 말하는 것은 아니지만 Java 개발자가 쉽게 이해할 수있는 Java와는 너무 다릅니다. –

+7

그가 직장에서 이러한 언어를 사용할 수있는 옵션을 가지고 있다면, 분명히 프로덕션 코드가 너무 어둡고 미성숙하다고 느끼지는 않습니다. 그의 신청서이므로 결정을 내리게해야한다고 생각합니다. 그 외에도 Clojure를 기본 언어 중 하나로 사용하는 여러 회사에 대해 알고 있으며 자랑 스럽습니다. – Rayne

+1

나는 시소 (https://github.com/daveray/seesaw)를 사용하기 전에 매우 작고 우아합니다. 또한 Clojure의 데이터 구조와 매우 잘 작동하여 양방향에서 원자와 스윙 구성 요소를 쉽게 바인딩 할 수 있습니다. – deterb

4

현재 스칼라에서 SWT 애플리케이션을 개발 중입니다. 하지만 나는 Clojure가 훨씬 더 작아 질 것으로 기대한다.

9

Groovy는 JVM에서 GUI 응용 프로그램을 빌드하기위한 구성보다 규칙을 사용하는 Griffon 프레임 워크를 가지고 있습니다. grails/rails와 비슷하지만 웹 애플리케이션이 아닌 GUI가 풍부합니다.

+0

나는 griffon에 관한 멍청이를 모르지만 jruby와 clojure에 대한 래퍼를 원한다고 말하지 않았습니까? 그런 식으로 듣는 것을 기억하십시오. – nickik

+0

Griffon은 플러그인을 통한 다중 언어 프로그래밍을 지원합니다 .Groovy, Java, Clojure, Scala, Mirah, Jython은 함께 사용할 수있는 언어입니다. – aalmiray

3

저는 Clojure를 Swing과 직접 사용하여 GUI를 작성했습니다. 지금까지 아주 잘 작동했습니다. 또한 코드 기반의 Clojure와 쉽게 통합 할 수있는 Java의 사용자 정의 UI 구성 요소를 작성했습니다.

나는 또한 clj-swing이 멋지다고 생각합니다. 이전 스윙 경험이없는 경우 스윙을 직접 사용하는 것보다 더 쉽습니다.

7

Groovy에는 GUI 프로그래밍을 더 쉽게하기위한 swing builder이라는 것이 있습니다. 다음은 그루비 웹 사이트에서 샘플 코드의 일부는, 그것이 버튼으로 프레임을 만들고 횟수를 계산 당신이 그것을 클릭

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) 
    } 
}