Java GUI 프레임 워크 무엇을 선택해야합니까? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot? [닫은]


228

자바에는 꽤 많은 GUI 프레임 워크가 있지만 오늘날의 선택 프레임 워크로 인식되는 것은 무엇입니까?

다음은 다른 프레임 워크에 대한 나의 이해입니다. 잘못된 경우 수정하십시오. 이것은 매우 느슨하게 정의 된 일련의 질문이지만 여전히 풍부한 GUI 응용 프로그램을 만들려는 사람에게는 가치가 있다고 생각합니다.


AWT

스윙의 기초이며 성능은 좋지만 고급 구성 요소가 부족합니다. 풍부한 응용 프로그램을 만들려면 AWT가 좋은 방법이 아닙니다. 그러나 리치 사용자 인터페이스가 필요없는 소규모 GUI 애플리케이션의 경우. 이것은 시도되고 입증 된 프레임 워크이므로 완벽하게 적합 할 수 있습니다.


그네

앞에서 언급 한 AWT를 기반으로합니다. 초기에는 느리고 버그가 많은 것으로 간주되어 IBM이 Eclipse 용 SWT를 작성하게했습니다. 그러나 Java 5 (또는 6?)에서 Swing은 새로운 응용 프로그램을 구축하기위한 프레임 워크가되었습니다. Swing에는 풍부한 구성 요소가 많이 있지만 일부 영역에는 여전히 부족합니다. 한 가지 예는 정렬 및 필터링 / 검색을 수행 할 수있는 완전한 기능을 갖춘 TreeTable 구성 요소가 없다는 것입니다.


SWT

이클립스를 위해 IBM이 만든이 회사는 당시 스윙이 이클립스에 적합하지 않다고 생각했습니다. 그 자체로는 저수준이며 JNI를 통해 플랫폼의 기본 위젯을 사용합니다. Swing 및 AWT와 전혀 관련이 없습니다. 그러나 API는 다소 복잡하고 직관적이지 않습니다. TreeTable과 같은 고급 구성 요소가 있습니다. (그러나 그들은 즉시 정렬 및 필터링을 지원하지 않는다고 생각합니다). SWT는 (JNI?를 통해) 일부 고유 바인딩을 사용하며 인터넷의 요구는 오늘날의 프로젝트에서이 프레임 워크를 사용해서는 안된다는 것입니다. (왜 안돼?)


SwingX

Swing을 기반으로하며 그 목적은 다양한 스윙 구성 요소를 만드는 것입니다. 아직 개발 중입니다. (매우 활동적이지는 않습니다.) 예를 들어 TreeTable과 같은 매우 유용한 구성 요소 집합이 있습니다. 그러나 TreeTable은 내가 아는 한 필터링 및 정렬을 지원하지 않습니다. 그러나 강조 표시로 검색을 지원합니다.

SwingX는 기존 Swing 구성 요소의 확장 또는 구성 요소 인 AFAIU (구성 요소)입니다.


J 굿즈

내가 알지 못하는 프레임 워크 ... 강점과 약점은 무엇입니까? Jgoodies와 나머지는 무엇입니까?

JGoodies OTOH는 PLAF 및 레이아웃에 관한 것입니다.


JavaFX

Java / Oracle의 최신 주력 제품입니다. 풍부한 데스크탑 또는 웹 응용 프로그램을 개발할 때 사실상 표준이 될 것입니다.


아파치 피벗

Java2D를 사용하여 UI를 렌더링하므로 Swing 및 AWT의 (IMO, bloated) 레거시 영향을 최소화합니다. (@Augustus Thoo)

RIA (Rich Internet Applications)에 중점을두고 있지만 데스크톱 응용 프로그램에도 적용 할 수 있습니다. 그리고 개인적인 의견으로는 매우 흥미로워 보입니다! 나는 특히 그것이 아파치 프로젝트라는 것을 좋아한다.

https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html


Qt 잠비

c / c ++로 작성된 기본 qt 라이브러리에 대한 Java 랩퍼. 매우 강력하고 널리 사용되며 수용됩니다. GUI 구성 요소가 많고 사용하기 쉬운 API가 있습니다.

http://qt-jambi.org/


그래서, 내가 요구하는 것을 약간 요약하려고합니다.

오늘날 많은 고급 구성 요소가 포함 된 Java로 데스크탑 응용 프로그램을 만들고 싶었다면 어떻게해야합니까? 그리고 왜?

이 프레임 워크 중 어느 것이 더 이상 사용되지 않는 것으로 인식되고 어느 프레임 워크가 먼 미래의 프레임 워크로 인식되어야합니까?

오늘날의 사실상 표준 프레임 워크는 무엇이며 Java GUI 애플리케이션을 작성하기 위해 어떤 도구를 사용합니까?


나는 이것을 묻는 것을 후회 할 수 있지만, 어쨌든 그것을 시도해보십시오.

C # /. Net은 가능한 모든 방향으로 구부릴 수있는 매우 사용하기 쉬운 구성 요소 집합을 가지고 있다고합니다. 그리고 다른 Java 프레임 워크를 어느 정도 조사한 후에 Java에 대해 똑같이 말할 수없는 것 같습니다. 왜 이런거야? java (세계에서 가장 널리 사용되는 프로그래밍 언어)에 동일한 GUI 구성 요소 세트가없는 이유는 무엇입니까?

Java가 GUI 구성 요소를 훨씬 낮은 수준으로 만들었습니까? 찾고있는 모든 고급 구성 요소를 작성할 수는 있지만 모든 작업을 직접 수행하지 않아도 많은 작업을 수행해야합니까?


나는 SWT가 "AWT와 Swing의 조합에 기초한"것을 몰랐다. 정말 그렇습니까? OS의 윈도우 시스템을 호출하는 것이 순수한 JNI 인 줄 알았습니다 ...
Rich

@ 리치 오, 그것은 답변 의견 중 하나에서 말했다. 방금 그들이 말하는 것을 알고 있다고 생각했습니다.
netbrain

4
"UI 툴킷"과 "GUI 프레임 워크"를 혼동한다고 생각합니다. AWT, Swing 및 SWT는 UI 툴킷이지만 반드시 "frameworks"라고 부르지는 않습니다. 프레임 워크는 주어진 UI 툴킷을 기반으로하며 애플리케이션을 빌드하기위한 접착제를 제공합니다. 먼저 UI 툴킷을 선택한 다음 해당 툴킷에서 작동하는 프레임 워크를 선택해야합니다. FWIW, 나는 내 자신의 집에서 만든 Guts-GUI 프레임 워크로 Swing을 선택할 것이다. :-)
jfpoilpret


2
JavaFX 는 더 이상 Preview SDK의 일부가 아니며 프로덕션 용도로 사용할 수 있습니다. 이 게시물을 업데이트하십시오.

답변:


79

의사 결정 트리 :

  1. Qt 및 SWT와 같은 프레임 워크에는 기본 DLL이 필요합니다. 따라서 필요한 모든 플랫폼이 지원됩니까? 네이티브 DLL을 앱과 함께 패키지 할 수 있습니까?

    SWT에 대한 방법은 여기를 참조하십시오 .

    여기서 선택할 수 있다면 SWT보다 Qt를 선호해야합니다. Qt는 UI와 데스크탑을 이해하는 사람들이 개발 한 반면 SWT는 Eclipse를 더 빠르게 만들기 위해 필요하지 않게 개발되었습니다. UI 프레임 워크보다 Java 1.4의 성능 패치입니다. JFace가 없으면 많은 주요 UI 구성 요소 나 UI 구성 요소의 매우 중요한 기능 (예 : 테이블 필터링)이 없습니다.

    SWT에 필요한 기능이 없으면 프레임 워크가 확장하기에 다소 적대적입니다. 예를 들어 클래스를 확장 할 수 없습니다 (클래스는 최종적이 아니며 패키지 this.getClass()가 아닌 경우 예외를 throw org.eclipse.swt하며 서명되어 있기 때문에 해당 패키지에 새 클래스를 추가 할 수 없음).

  2. 순수하고 순수한 Java 솔루션이 필요한 경우 나머지는 그대로 둡니다. AWT, Swing, SwingX로 시작하겠습니다.

    AWT가 오래되었습니다. Swing은 구식입니다 (아마도 10 년 동안 Swing에 대해서는 별다른 작업이 없었습니다). Swing이 시작하기에 좋았다고 주장 할 수 있지만 우리는 코드가 썩었다는 것을 알고 있습니다. 오늘날 UI에는 특히 그렇습니다.

    SwingX를 사용하게됩니다. 느린 진행 기간이 지난 후 개발이 다시 시작되었습니다 . Swing의 가장 큰 단점은 15 년 전에는 매우 희미하지만 오늘날 "서투른"느낌을주는 오래된 아이디어에 매달린다는 것입니다. 예를 들어, 테이블보기는 필터링 및 정렬을 지원하지만 여전히이를 구성해야합니다. 현대적인 느낌의 UI를 얻으려면 많은 보일러 플레이트 코드를 작성해야합니다.

    또 다른 약점은 테마입니다. 오늘 현재, 많은 테마가 있습니다. 톱 10에 대해서는 여기를 참조하십시오 . 그러나 일부는 느리고 일부는 버그가 있고 일부는 불완전합니다. UI를 작성할 때 나는 그것을 싫어하고 사용자는 이상한 테마를 선택했기 때문에 뭔가 효과가 없다고 불평합니다.

  3. JGoodies는 SwingX와 같은 Swing 위에 또 다른 레이어입니다. Swing을보다 즐겁게 사용하려고합니다. 웹 사이트가 좋아 보인다. 튜토리얼 ... hm ... 여전히 검색 중 ...을 살펴 봅시다. 웹 사이트에 문서가 전혀없는 것 같습니다. 구조에 구글 . 아니, 유용한 튜토리얼은 전혀 없습니다.

    잠재적 인 새로운 팬들로부터 문서를 숨기려고 노력하는 UI 프레임 워크에 대해서는 확신이 없습니다. 그렇다고 JGoodies가 나쁘다는 것은 아닙니다. 나는 그것에 대해 말할 좋은 것을 찾지 못했지만 멋지게 보입니다.

  4. JavaFX. 멋지고 세련된. 지원이 있지만 심각한 UI 프레임 워크보다 반짝이는 장난감이라고 생각합니다. 이러한 느낌은 트리 테이블과 같은 복잡한 UI 구성 요소가 없기 때문에 발생합니다. HTML을 표시하기 위한 웹킷 기반 구성 요소가 있습니다 .

    그것이 처음 소개되었을 때, 나의 첫 생각은 "5 년이 너무 늦었습니다". 당신의 목표가 전화 나 웹 사이트를위한 멋진 앱이라면, 좋습니다. 귀하의 목표가 전문적인 데스크탑 응용 프로그램 인 경우 필요한 것을 제공하는지 확인하십시오.

  5. 피벗. 처음 들었을 때 기본적으로 Java2D 기반의 새로운 UI 프레임 워크입니다. 그래서 어제 시도해 보았습니다. 스윙 없음, AWT ( new Font(...)) 의 작은 비트 .

    나의 첫인상은 좋은 것이었다. 시작하는 데 도움이되는 광범위한 설명서가 있습니다. 대부분의 예제 는 웹 페이지에서 라이브 데모 (참고 : 웹 브라우저에서 Java를 활성화해야합니다. 보안 위험 )와 함께 제공되므로 코드와 결과 응용 프로그램을 나란히 볼 수 있습니다.

    내 경험상 문서화보다 코드에 더 많은 노력이 필요합니다. 피벗 문서를 살펴보면 코드에 많은 노력을 기울여야했습니다. 현재 브라우저에서 일부 예제 ( PIVOT-858 ) 가 작동하지 못하게하는 버그가 있습니다 .

    피벗에 대한 두 번째 인상은 사용하기 쉽다는 것입니다. 문제가 발생했을 때 일반적으로 예제를보고 신속하게 해결할 수있었습니다. 그래도 각 구성 요소가 지원하는 모든 스타일에 대한 참조가 누락되었습니다.

    JavaFX와 마찬가지로 트리 테이블 구성 요소 ( PIVOT-306 ) 와 같은 일부 고급 구성 요소가 누락되었습니다 . 테이블보기로 게으른 로딩을 시도하지 않았습니다. 내 인상은 기본 모델이 게으른 로딩을 사용하면 충분하다는 것입니다.

    유망한. 가능하다면 시도해보십시오.


피벗 데모를 시도한 "주방 싱크대", 일부 그룹을 연 후에는 전체 CPU를 계속 사용합니다. Pivot 디자인으로 인해 내 프로젝트에서 분명히 원하지 않습니다.
표시 이름

문제의 원인을 찾은 후 나중 버전에서 수정 된 것 같습니다 : apache-pivot-users.399431.n3.nabble.com/…
표시 이름

2
JavaFX 8 (Java 8 이상)에는 TreeTableView 위젯이 있습니다. 그러나 JavaFX 2.2 (Java 7 용)에는이 기능이 없으며 표준 오류 및 정보 다이얼로그도 없습니다 . stackoverflow.com/a/12760202/105137을 참조하십시오 . 또한 ControlsFX 위젯 라이브러리는 Java 8에서만 사용 가능합니다. fxexperience.com/controlsfx
kostmo

12

SWT 자체는 상당히 저수준이며 JNI를 통해 플랫폼의 기본 위젯을 사용합니다. Swing 및 AWT와 전혀 관련이 없습니다. 이클립스 IDE 와 같은 모든 Eclipse 기반 리치 클라이언트 응용 프로그램, Vuze에 비트 토런트 클라이언트 , SWT를 사용하여 구축된다. 또한 Eclipse 플러그인을 개발하는 경우 일반적으로 SWT를 사용합니다.
저는 거의 5 년 동안 Eclipse 기반 애플리케이션 및 플러그인을 개발해 왔으므로 분명히 편향되어 있습니다. 그러나 SWT 및 JFace UI 툴킷 작업에 대한 광범위한 경험이 있습니다.위에 빌드됩니다. JFace가 매우 풍부하고 강력하다는 것을 알았습니다. 경우에 따라 SWT를 선택하는 주된 이유 일 수도 있습니다. IDE와 유사하다면 (테이블, 트리, 기본 컨트롤 등) 작업 UI를 매우 빠르게 채울 수 있습니다. 물론 사용자 지정 컨트롤도 통합 할 수 있지만 추가 노력이 필요합니다.


귀하의 의견으로는 SWT + JFace에서 열 정렬 및 필터링 기능이있는 TreeTable과 같은 고급 구성 요소가 큰 문제가 될 것입니까?
netbrain

@ netbrain : 나는 여러 번 해왔지만 JFace에서는 매우 간단합니다. 이것이 제가 "IDE-like"인터페이스라는 의미 일 것입니다. 어쩌면 최선의 선택이 아닐 수도 있습니다.
Zsolt Török

9

Apache Pivot http://pivot.apache.org/ 프레임 워크를 제안하고 싶습니다 .

나는 그것을 잠시 시도하고는 RIA (리치 인터넷 애플리케이션) 프레임 워크로 무엇을 제공 할 수있는 감동했다 알라 플래시.

Java2D를 사용하여 UI를 렌더링하므로 Swing 및 AWT의 (IMO, bloated) 레거시 영향을 최소화합니다.


1
netbrain이 데스크탑 앱에 대해 묻는 느낌이 들었습니다. RIA 프레임 워크의 경우 GWT 및 Vaadin도 고려하십시오. 이 프레임 워크를 사용하면 모든 일반 웹 브라우저에서 잘 실행되는 Java로 작성하고 컴파일하고 JavaScript를 얻을 수 있습니다.
Costis Aivalis

데스크톱 응용 프로그램에 피벗을 적용 할 수 없습니까?
netbrain

정의의 문제 일 수도 있지만 RIA 프레임 워크는 기본적으로 브라우저에서 실행되도록 설계되었습니다.
Costis Aivalis

2
@netbrain : 예, 데스크톱 앱 (JFrame) 또는 애플릿 (JApplet)으로 피벗을 실행할 수 있습니다.
Augustus Thoo

9

Swing + SwingX + Miglayout 은 제가 선택한 조합입니다. Miglayout은 Swings가 200 개의 서로 다른 레이아웃 관리자를 인식하고 훨씬 강력하다는 것보다 훨씬 간단합니다. 또한 레이아웃을 "디버그"할 수있는 기능을 제공합니다. 이는 복잡한 레이아웃을 만들 때 특히 유용합니다.


8

또 다른 옵션은 Qt Jambi 를 사용하는 것 입니다. C ++의 번거 로움없이 거의 모든 Qt (많은 구성 요소, 좋은 문서, 사용하기 쉬운)를 가지고 있습니다. 3-4 년 전에 작은 프로젝트에 사용했지만 거의 성숙했습니다.

여기서 Swing vs. Qt에 대한 토론을 볼 수 있습니다 .


5

내 개인적인 의견 : NetBeans 플랫폼과 함께 Swing을 사용하십시오.

NetBeans 플랫폼이 Swing을 완전히 기반으로하기 때문에 고급 컴포넌트 (NetBeans가 제공하는 것 이상)가 필요한 경우 문제없이 (또는 JGoodies) SwingX를 쉽게 통합 할 수 있습니다.

기본 UI 프레임 워크를 기반으로하는 좋은 플랫폼 없이는 큰 데스크톱 응용 프로그램 (또는 큰 응용 프로그램)을 시작하지 않습니다.

다른 옵션은 Eclipse RCP와 함께 SWT이지만 "순수한"Swing 구성 요소를 이러한 응용 프로그램에 통합하는 것은 어렵습니다 (불가능하지는 않지만).

학습 곡선은 NetBeans 플랫폼에 약간 가파르지만 (Eclipse에서도 마찬가지라고 생각하지만) 내가 권할만한 좋은 책이 있습니다.


1
SwingX는 기존 Swing 구성 요소의 확장 또는 구성 요소 인 AFAIU (구성 요소)입니다. JGoodies OTOH는 PLAF 및 레이아웃에 관한 것입니다. 그러나 말했듯이 Swing과 완벽하게 통합됩니다.
앤드류 톰슨

1
+1 Swing 기반 개발. Swing은 AWT를 기반으로 구축되었으며 모든 플랫폼에서 동일하게 보이고 작동하는 경량 구성 요소를 포함하므로 AWT 구성 요소를 직접 사용해서는 안됩니다. toedter.com JCalendar와 같이 개발 GUI에 쉽게 추가 할 수있는 훌륭한 Bean이 많이 있습니다.
Costis Aivalis

1
@Andrew는 PLAF 및 레이아웃 외에도 Bean 바인딩 (프레젠테이션 모델 패턴 용), 유효성 검사 및 "JSR-296 like"프레임 워크 (상업용)를 제공합니다.
jfpoilpret

3

NetBeans의 내장 스윙 프레임 워크로서 JSR296 기반 Java Desktop Aplication을 잊어 버렸습니다.

AWT와 JavaFX를 제외한 모든 설명 프레임 워크는 Swing을 기반으로합니다 .Swing으로 시작하면 모든 Swing (Based Frameworks)에 대해 명확하게 이해할 수 있습니다.

ATW, SWT (Eclipse), Java Desktop Aplication (Netbeans), SwingX, JGoodies

모든 프레임 워크 (JGoodies에 대해 더 잘 모르겠습니다) 포함. JavaFX는 진행 시간이 오래 걸리지 않았으며 최신 버전이 없으면 많은 Swing 기반 프레임 워크가 중지됩니다.

단지 내 견해-그들 중 가장 좋은 것은 SwingX이지만 Swing에 대한 가장 깊은 지식이 필요했습니다.

스윙 기반 프레임 워크를위한 룩앤필


AWT 구성 요소, 스윙 JCompoentns에 부분에 있지만, AWT와 스윙 사이의 그 부분은 예를 들어 스윙 JComponent에 직접 (API)를 구현 상속을 많이하거나 직접 :-) AWT에서 중첩 된 메소드의 구현, accesible 및 상속 방법과 차이
mKorbel

JSR296이 죽었습니다. 더 이상 "유지"되지 않으며 이에 대한 지원이 NetBeans에서 제거되었습니다. (그리고 시작하기에 정말 좋은 프레임 워크는
아니었다

@a_horse_with_no_name 바로 with same progressSWT, SwingX, 새로운 소유자, 새로운 관리자
mKorbel

1
IBM이 개발 한 SWT는 Swing을 기반으로하지 않으며 경쟁 기술입니다. 스윙은 AWT를 사용합니다. JavaFX도 Swing을 기반으로하지 않습니다. 완전히 새로운 프레임 워크입니다. 일부는 스윙의 후계자라고 부르지 만 여전히 그 전투를 부르기에는 너무 미숙합니다. 나는 현재 똑같은 결정을 내리고 있으며 스윙은 가장 성숙하지만 현실적인 옵션이라는 사실에 대한 후보입니다.
Gordon

1
SwingX는 Swing의 확장이며, 이것이 Swing 지식을 필요로하는 이유입니다. 실제로 SwingX의 일부 기능이 Swing 자체로 롤업되었습니다.
Gordon

3

제가 참여한 데스크톱 응용 프로그램에 대해 Swing에 매우 만족했습니다. 그러나 고급 구성 요소를 제공하지 않는 Swing에 대한 의견을 공유합니다. 이 경우 내가 한 일은 JIDE로가는 것입니다. 무료는 아니지만 가격도 비싸지 않으며 벨트 아래에 훨씬 더 많은 도구를 제공합니다. 특히 필터링 가능한 TreeTable을 제공합니다.


알아 둘만 한! JIDE는 Swing을 기반으로 자체 구성 요소를 만들었습니다.
netbrain

예, JIDE는 그리드, 트리, 테이블, 그래프 등을 다루는 구성 요소를 상당히 많이 만들었습니다. 내가 말했듯이, 그것은 무료가 아니지만 이러한 것들을 스스로 만드는 데 시간이 걸리면 이미 만들어진 것을 사용하는 것이 더 나을 것입니다. 또한, 내가 이해하는 한, JIDE는 오픈 소스 프로젝트가 웹 사이트 링크 또는 '정보'대화 상자의 로고를 대신하여 구성 요소를 사용할 수 있도록 유연합니다.
sbrattla

3

나는 스윙과 함께 갈 것입니다. 레이아웃에는 JGoodies 양식 레이아웃을 사용합니다. 양식 레이아웃에 대한 백서를 공부할 가치가 있습니다-http: //www.jgoodies.com/freeware/forms/

또한 거대한 데스크톱 응용 프로그램을 개발하려면 프레임 워크가 필요합니다. 다른 사람들은 netbeans 프레임 워크를 지적했습니다. 나는 그것을 좋아하지 않아서 우리 회사에서 사용하는 새로운 것을 썼습니다. 나는 그것을 sourceforge에 넣었지만 그것을 많이 문서화 할 시간을 찾지 못했습니다. 코드를 찾아 볼 수있는 링크는 다음과 같습니다.

http://swingobj.svn.sourceforge.net/viewvc/swingobj/

쇼케이스는 간단한 로그온 방법을 보여줍니다.

궁금한 점이 있으면 알려주세요.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.