[java] Java GUI 프레임 워크 무엇을 선택해야합니까? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot? [닫은]
자바에는 꽤 많은 GUI 프레임 워크가 있지만 오늘날의 선택 프레임 워크로 인식되는 것은 무엇입니까?
다음은 다른 프레임 워크에 대한 나의 이해입니다. 잘못된 경우 수정하십시오. 이것은 매우 느슨하게 정의 된 일련의 질문이지만 여전히 풍부한 GUI 응용 프로그램을 만들려는 사람에게는 가치가 있다고 생각합니다.
스윙의 기초이며 성능은 좋지만 고급 구성 요소가 부족합니다. 풍부한 응용 프로그램을 만들려면 AWT가 좋은 방법이 아닙니다. 그러나 리치 사용자 인터페이스가 필요없는 소규모 GUI 애플리케이션의 경우. 이것은 시도되고 입증 된 프레임 워크이므로 완벽하게 적합 할 수 있습니다.
앞에서 언급 한 AWT를 기반으로합니다. 초기에는 느리고 버그가 많은 것으로 간주되어 IBM이 Eclipse 용 SWT를 작성하게했습니다. 그러나 Java 5 (또는 6?)에서 Swing은 새로운 응용 프로그램을 구축하기위한 프레임 워크가되었습니다. Swing에는 풍부한 구성 요소가 많이 있지만 일부 영역에는 여전히 부족합니다. 한 가지 예는 정렬 및 필터링 / 검색을 수행 할 수있는 완전한 기능을 갖춘 TreeTable 구성 요소가 없다는 것입니다.
이클립스를 위해 IBM이 만든이 회사는 당시 스윙이 이클립스에 적합하지 않다고 생각했습니다. 그 자체로는 저수준이며 JNI를 통해 플랫폼의 기본 위젯을 사용합니다. Swing 및 AWT와 전혀 관련이 없습니다. 그러나 API는 다소 복잡하고 직관적이지 않습니다. TreeTable과 같은 고급 구성 요소가 있습니다. (그러나 그들은 즉시 정렬 및 필터링을 지원하지 않는다고 생각합니다). SWT는 (JNI?를 통해) 일부 고유 바인딩을 사용하며 인터넷의 요구는 오늘날의 프로젝트에서이 프레임 워크를 사용해서는 안된다는 것입니다. (왜 안돼?)
Swing을 기반으로하며 그 목적은 다양한 스윙 구성 요소를 만드는 것입니다. 아직 개발 중입니다. (매우 활동적이지는 않습니다.) 예를 들어 TreeTable과 같은 매우 유용한 구성 요소 집합이 있습니다. 그러나 TreeTable은 내가 아는 한 필터링 및 정렬을 지원하지 않습니다. 그러나 강조 표시로 검색을 지원합니다.
SwingX는 기존 Swing 구성 요소의 확장 또는 구성 요소 인 AFAIU (구성 요소)입니다.
J 굿즈
내가 알지 못하는 프레임 워크 … 강점과 약점은 무엇입니까? Jgoodies와 나머지는 무엇입니까?
JGoodies OTOH는 PLAF 및 레이아웃에 관한 것입니다.
Java / Oracle의 최신 주력 제품입니다. 풍부한 데스크탑 또는 웹 응용 프로그램을 개발할 때 사실상 표준이 될 것입니다.
Java2D를 사용하여 UI를 렌더링하므로 Swing 및 AWT의 (IMO, bloated) 레거시 영향을 최소화합니다. (@Augustus Thoo)
RIA (Rich Internet Applications)에 중점을두고 있지만 데스크톱 응용 프로그램에도 적용 할 수 있습니다. 그리고 개인적인 의견으로는 매우 흥미로워 보입니다! 나는 특히 그것이 아파치 프로젝트라는 것을 좋아한다.
https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html
c / c ++로 작성된 기본 qt 라이브러리에 대한 Java 랩퍼. 매우 강력하고 널리 사용되며 수용됩니다. GUI 구성 요소가 많고 사용하기 쉬운 API가 있습니다.
그래서, 내가 요구하는 것을 약간 요약하려고합니다.
오늘날 많은 고급 구성 요소가 포함 된 Java로 데스크탑 응용 프로그램을 만들고 싶었다면 어떻게해야합니까? 그리고 왜?
이 프레임 워크 중 어느 것이 더 이상 사용되지 않는 것으로 인식되고 어느 프레임 워크가 먼 미래의 프레임 워크로 인식되어야합니까?
오늘날의 사실상 표준 프레임 워크는 무엇이며 Java GUI 애플리케이션을 작성하기 위해 어떤 도구를 사용합니까?
나는 이것을 묻는 것을 후회 할 수 있지만, 어쨌든 그것을 시도해보십시오.
C # /. Net은 가능한 모든 방향으로 구부릴 수있는 매우 사용하기 쉬운 구성 요소 집합을 가지고 있다고합니다. 그리고 다른 Java 프레임 워크를 어느 정도 조사한 후에 Java에 대해 똑같이 말할 수없는 것 같습니다. 왜 이런거야? java (세계에서 가장 널리 사용되는 프로그래밍 언어)에 동일한 GUI 구성 요소 세트가없는 이유는 무엇입니까?
Java가 GUI 구성 요소를 훨씬 낮은 수준으로 만들었습니까? 찾고있는 모든 고급 구성 요소를 작성할 수는 있지만 모든 작업을 직접 수행하지 않아도 많은 작업을 수행해야합니까?
답변
의사 결정 트리 :
-
Qt 및 SWT와 같은 프레임 워크에는 기본 DLL이 필요합니다. 따라서 필요한 모든 플랫폼이 지원됩니까? 네이티브 DLL을 앱과 함께 패키지 할 수 있습니까?
여기서 선택할 수 있다면 SWT보다 Qt를 선호해야합니다. Qt는 UI와 데스크탑을 이해하는 사람들이 개발 한 반면 SWT는 Eclipse를 더 빠르게 만들기 위해 필요하지 않게 개발되었습니다. UI 프레임 워크보다 Java 1.4의 성능 패치입니다. JFace가 없으면 많은 주요 UI 구성 요소 나 UI 구성 요소의 매우 중요한 기능 (예 : 테이블 필터링)이 없습니다.
SWT에 필요한 기능이 없으면 프레임 워크가 확장하기에 다소 적대적입니다. 예를 들어 클래스를 확장 할 수 없습니다 (클래스는 최종적이 아니며 패키지
this.getClass()
가 아닌 경우 예외를 throworg.eclipse.swt
하며 서명되어 있기 때문에 해당 패키지에 새 클래스를 추가 할 수 없음). -
순수하고 순수한 Java 솔루션이 필요한 경우 나머지는 그대로 둡니다. AWT, Swing, SwingX로 시작하겠습니다.
AWT가 오래되었습니다. Swing은 구식입니다 (아마도 10 년 동안 Swing에 대해서는 별다른 작업이 없었습니다). Swing이 시작하기에 좋았다고 주장 할 수 있지만 우리는 코드가 썩었다는 것을 알고 있습니다. 오늘날 UI에는 특히 그렇습니다.
SwingX를 사용하게됩니다. 느린 진행 기간이 지난 후 개발이 다시 시작되었습니다 . Swing의 가장 큰 단점은 15 년 전에는 매우 희미하지만 오늘날 “서투른”느낌을주는 오래된 아이디어에 매달린다는 것입니다. 예를 들어, 테이블보기는 필터링 및 정렬을 지원하지만 여전히이를 구성해야합니다. 현대적인 느낌의 UI를 얻으려면 많은 보일러 플레이트 코드를 작성해야합니다.
또 다른 약점은 테마입니다. 오늘 현재, 많은 테마가 있습니다. 톱 10에 대해서는 여기를 참조하십시오 . 그러나 일부는 느리고 일부는 버그가 있고 일부는 불완전합니다. UI를 작성할 때 나는 그것을 싫어하고 사용자는 이상한 테마를 선택했기 때문에 뭔가 효과가 없다고 불평합니다.
-
JGoodies는 SwingX와 같은 Swing 위에 또 다른 레이어입니다. Swing을보다 즐겁게 사용하려고합니다. 웹 사이트가 좋아 보인다. 튜토리얼 … hm … 여전히 검색 중 …을 살펴 봅시다. 웹 사이트에 문서가 전혀없는 것 같습니다. 구조에 구글 . 아니, 유용한 튜토리얼은 전혀 없습니다.
잠재적 인 새로운 팬들로부터 문서를 숨기려고 노력하는 UI 프레임 워크에 대해서는 확신이 없습니다. 그렇다고 JGoodies가 나쁘다는 것은 아닙니다. 나는 그것에 대해 말할 좋은 것을 찾지 못했지만 멋지게 보입니다.
-
JavaFX. 멋지고 세련된. 지원이 있지만 심각한 UI 프레임 워크보다 반짝이는 장난감이라고 생각합니다. 이러한 느낌은 트리 테이블과 같은 복잡한 UI 구성 요소가 없기 때문에 발생합니다. HTML을 표시하기 위한 웹킷 기반 구성 요소가 있습니다 .
그것이 처음 소개되었을 때, 나의 첫 생각은 “5 년이 너무 늦었습니다”. 당신의 목표가 전화 나 웹 사이트를위한 멋진 앱이라면, 좋습니다. 귀하의 목표가 전문적인 데스크탑 응용 프로그램 인 경우 필요한 것을 제공하는지 확인하십시오.
-
피벗. 처음 들었을 때 기본적으로 Java2D 기반의 새로운 UI 프레임 워크입니다. 그래서 어제 시도해 보았습니다. 스윙 없음, AWT (
new Font(...)
) 의 작은 비트 .나의 첫인상은 좋은 것이었다. 시작하는 데 도움이되는 광범위한 설명서가 있습니다. 대부분의 예제 는 웹 페이지에서 라이브 데모 (참고 : 웹 브라우저에서 Java를 활성화해야합니다. 보안 위험 )와 함께 제공되므로 코드와 결과 응용 프로그램을 나란히 볼 수 있습니다.
내 경험상 문서화보다 코드에 더 많은 노력이 필요합니다. 피벗 문서를 살펴보면 코드에 많은 노력을 기울여야했습니다. 현재 브라우저에서 일부 예제 ( PIVOT-858 ) 가 작동하지 못하게하는 버그가 있습니다 .
피벗에 대한 두 번째 인상은 사용하기 쉽다는 것입니다. 문제가 발생했을 때 일반적으로 예제를보고 신속하게 해결할 수있었습니다. 그래도 각 구성 요소가 지원하는 모든 스타일에 대한 참조가 누락되었습니다.
JavaFX와 마찬가지로 트리 테이블 구성 요소 ( PIVOT-306 ) 와 같은 일부 고급 구성 요소가 누락되었습니다 . 테이블보기로 게으른 로딩을 시도하지 않았습니다. 내 인상은 기본 모델이 게으른 로딩을 사용하면 충분하다는 것입니다.
유망한. 가능하다면 시도해보십시오.
답변
SWT 자체는 상당히 저수준이며 JNI를 통해 플랫폼의 기본 위젯을 사용합니다. Swing 및 AWT와 전혀 관련이 없습니다. 이클립스 IDE 와 같은 모든 Eclipse 기반 리치 클라이언트 응용 프로그램, Vuze에 비트 토런트 클라이언트 , SWT를 사용하여 구축된다. 또한 Eclipse 플러그인을 개발하는 경우 일반적으로 SWT를 사용합니다.
저는 거의 5 년 동안 Eclipse 기반 애플리케이션 및 플러그인을 개발해 왔으므로 분명히 편향되어 있습니다. 그러나 SWT 및 JFace UI 툴킷 작업에 대한 광범위한 경험이 있습니다.위에 빌드됩니다. JFace가 매우 풍부하고 강력하다는 것을 알았습니다. 경우에 따라 SWT를 선택하는 주된 이유 일 수도 있습니다. IDE와 유사하다면 (테이블, 트리, 기본 컨트롤 등) 작업 UI를 매우 빠르게 채울 수 있습니다. 물론 사용자 지정 컨트롤도 통합 할 수 있지만 추가 노력이 필요합니다.
답변
Apache Pivot http://pivot.apache.org/ 프레임 워크를 제안하고 싶습니다 .
나는 그것을 잠시 시도하고는 RIA (리치 인터넷 애플리케이션) 프레임 워크로 무엇을 제공 할 수있는 감동했다 알라 플래시.
Java2D를 사용하여 UI를 렌더링하므로 Swing 및 AWT의 (IMO, bloated) 레거시 영향을 최소화합니다.
답변
Swing + SwingX + Miglayout 은 제가 선택한 조합입니다. Miglayout은 Swings가 200 개의 서로 다른 레이아웃 관리자를 인식하고 훨씬 강력하다는 것보다 훨씬 간단합니다. 또한 레이아웃을 “디버그”할 수있는 기능을 제공합니다. 이는 복잡한 레이아웃을 만들 때 특히 유용합니다.
답변
또 다른 옵션은 Qt Jambi 를 사용하는 것 입니다. C ++의 번거 로움없이 거의 모든 Qt (많은 구성 요소, 좋은 문서, 사용하기 쉬운)를 가지고 있습니다. 3-4 년 전에 작은 프로젝트에 사용했지만 거의 성숙했습니다.
여기서 Swing vs. Qt에 대한 토론을 볼 수 있습니다 .
답변
내 개인적인 의견 : NetBeans 플랫폼과 함께 Swing을 사용하십시오.
NetBeans 플랫폼이 Swing을 완전히 기반으로하기 때문에 고급 컴포넌트 (NetBeans가 제공하는 것 이상)가 필요한 경우 문제없이 (또는 JGoodies) SwingX를 쉽게 통합 할 수 있습니다.
기본 UI 프레임 워크를 기반으로하는 좋은 플랫폼 없이는 큰 데스크톱 응용 프로그램 (또는 큰 응용 프로그램)을 시작하지 않습니다.
다른 옵션은 Eclipse RCP와 함께 SWT이지만 “순수한”Swing 구성 요소를 이러한 응용 프로그램에 통합하는 것은 어렵습니다 (불가능하지는 않지만).
학습 곡선은 NetBeans 플랫폼에 약간 가파르지만 (Eclipse에서도 마찬가지라고 생각하지만) 내가 권할만한 좋은 책이 있습니다.
답변
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에 대한 가장 깊은 지식이 필요했습니다.
스윙 기반 프레임 워크를위한 룩앤필