Java Swing 개발의 모범 사례는 무엇입니까?


17

이 질문에 대한 사전 조사를 수행하는 동안 인터넷에 Java Swing 모범 사례에 대한 잘 구성된 정보가 많지 않다는 것을 알았습니다. 그래서 저는 하나의 위대한 목록을 만들 때 Stack Exchange에 기회를 줄 것이라고 생각합니다.

Java Swing 개발의 모범 사례는 무엇입니까? 당신을 위해 무엇을 찾았으며 왜 그런가요?


2
나는 학교에서 그네와 놀았는데 즐거운 경험이 아니었다. 모든 것이 부풀어 오르고 불필요하게 복잡해 보였습니다. 가장 좋은 방법은 다른
Robert Harvey

1
@RobertHarvey "학교에서 놀기"는 프로덕션 소프트웨어 제공과는 거리가 멀다. Swing이 필요한 모든 것을 합리적이고 논리적으로 수행 할 수 있다는 것을 알게되었습니다.

글쎄, 이런 식으로 말하십시오. 단순한 학교 프로젝트에서 그렇게 어려웠다면 실제 프로젝트에서는 거의 상상하기 어려울 것입니다.
Robert Harvey

1
@RobertHarvey 전원이 ... 가격 함께 제공

하나 더 중요한 것. 스윙 구성 요소는 직렬화 가능하며 많은 조상이 있습니다. 따라서 대부분의 경우 상속하기에는 너무 무겁습니다. 특히 직렬화 할 수없는 상태 인 경우 일부 랩핑 기술을 고려해야합니다. 구성 요소에서 상속하는 경우 뷰로 사용하십시오 (MVC 또는 유사한 패턴).
다비드 Horváth

답변:


12

나는 나를 위해 일한 것에 대해서만 대답 할 수 있습니다. 다른 의견 제시 자들은 일반적으로 Java GUI가 일반적이지 않은 모양과 느낌의 '비정규의 계곡'에 속한다고 지적했으며, 이에 대해서는 이의를 제기하지 않습니다.

Action API를 잘 활용하십시오. 사용자가 수행 할 다양한 작업을보다 잘 캡슐화하여 바로 가기, 가속기 키, 버튼 및 기타 입력 개체에 훨씬 쉽게 연결할 수 있습니다.

적절한 레이아웃 관리자를 사용하십시오. GridBagLayout은 매우 강력하지만 과도한 의견이 없으면 유지할 수 없다고 말할 수 있습니다. 내가 관리하는 오래된 GUI 응용 프로그램에서 Sonar와 같은 정적 코드 분석 도구를 실행할 때 GridBags 레이아웃을 올바르게 만들기 위해 항상 막대한 양의 마법 숫자를 지적합니다. 픽셀 완벽 정렬을 지정할 필요가없는 GroupLayout으로 많은 성공을 거두었습니다.

JDialog가 필요하다고 생각되면 아마도 필요하지 않을 것입니다. 사용자 경험 측면에서 대화 상자는 끔찍합니다.이 응용 프로그램은 모든 메뉴와 양식에 대화 상자를 사용하고 기괴한 방식으로 항상 가장 규칙을 적용하기로 결정했습니다. 우리가 실제로 메뉴를 통해 무언가를 경고해야 할 때 이것은 유지 보수의 악몽으로 바뀌 었습니다. Cue는 초점이 맞지 않는 (따라서 무시할 수없는) 대화 상자를 클릭하는 것에 좌절했습니다.

적절한 경우 자체 멀티 스레딩을 롤링하는 대신 SwingWorker를 사용하십시오. SwingWorker를 확장하고 GUI에 정기적 인 업데이트를 제공하면서 더 오랜 작업을 수행하는 것은 매우 쉽습니다. 클라이언트 업데이트를 다운로드하십시오. 작업자 스레드 예약을 처리하고 다운로드 비율을 다시보기에 게시 할 수 있으므로 ProgressBar 또는 업데이트 된 내용을 업데이트 할 수 있습니다.

내가 인정할 수있는 경험으로는 그것이 제안 할 수있는 전부입니다.


2
JDialog대화 상자에 사용하는 한 완벽하게 좋습니다.
조나스

1
나는 당신이 절대적으로보아야하고 즉시 행동해야하는 정보를 위해 그것들을 사용하고 있다면 그것들이 좋다고 동의합니다. 그러나 대부분의 정보는 실제로 사용자 경험을 크게 방해 할 필요가 없습니다. 그것은 내 예선의 요점이었습니다.
Tom G

@Jonas 나는 요점은 대화가 나쁜 것 (그들이 대화로 구현되었는지 여부에 관계없이 JDialog)이라는 것입니다.
Tom Hawtin-tackline

1
커플 링은 냄새가 나는 편이지만 스레딩 코드를 작성하는 것보다 IMO가 좋습니다. 오히려 미묘한 스레드 버그보다 우아한 코드를 다루고 싶습니다.
Tom G

3
- 당신은 MigLayout보고 할 수 있습니다 miglayout.com

4

첫 번째 것 중 하나는 직접 작업하지 않는 것입니다. Swing의 레이아웃 시스템 (IMHO)은 끔찍하며, 실질적인 응용 프로그램을 만드는 것은 악몽입니다.

내가 사용한 많은 대체 레이아웃 관리자 중 두 가지는 MigLayout 및 MultiSplitPane 레이아웃입니다. MigLayout은보다 일반적인 목적으로 생각할 수있는 레이아웃을 쉽고 깔끔하게 만듭니다. MultiSplitPane이 더 구체적입니다. 복잡하지 않은 GUI의 간단한 레이아웃을 만드는 데 사용했습니다.

편집 : 이것은 스윙을 대체하지 않습니다 . Swing을 사용해야하는 경우 이러한 레이아웃 관리자는 스윙 만 관리하고 교체하지 않기 때문에 계속 사용할 수 있습니다.


물론 더 좋은 대안은 Swing을 사용하지 않는 것입니다. 스윙은 작업하기가 끔찍한 것으로 비난을 받았으며, 원어민처럼 보이지 않으며 느리게 보입니다 . Qt, SWT, GTK와 같은 것을하지 말아야 할 것을 스윙으로부터 배운 많은 대안이 존재합니다. 이들은 스윙의 두통에 대한 훌륭한 장기 솔루션입니다

편집 : @Lord Torgamus가 말했듯이 Swing을 강제로 사용하면 실제로 사용할 수 없습니다. 프로젝트를 만들 때이를 최대한 활용하려고하면 레거시 앱을 사용하거나 선택할 때 3/4가 아닌 프로젝트를 만들 때이를 해결하십시오.

또한 대체 GUI의 대부분은 기본 라이브러리를 사용하므로 운영 체제처럼 보인 다음 Swing 또는 다른 Pure Java GUI로 대체됩니다.


4
귀하의 의견에 감사 드리지만 "Swing을 사용하지 마십시오"는 어떤 이유로 든 Swing을 사용해야하므로이 질문에 해당하는 사람들에게는 도움이되지 않습니다.

@Lord 이것이 QT와 SWT를 제안하기 전에 대체 레이아웃 관리자를 제안한 이유입니다. 가능한 경로를 사용하십시오.
TheLQ

"IMHO (Swing in Layout)의 레이아웃 시스템은 끔찍하며, 실질적인 앱을 만드는 것은 악몽입니다." 레이아웃 관리자는 Swing이 아닌 AWT에서 오는 경향이 있습니다. 물론 BoxLayout 및 GroupLayout과 같은 몇 가지 Swing 관련 항목이 있습니다. 레이아웃 관리자는 완전히 선택 사항입니다 .... 대신 .NET WinForms에서와 같이 각 구성 요소의 좌표를 지정할 수 있습니다 (.NET에는 GUI가 있습니다).
Powerlord

3
- MigLayout에서 찾아 보게 miglayout.com

1
@TheLQ Ok Swing의 파일 관리자에 대해 동의합니다. Mac OS X에서도 마찬가지입니다. 어쨌든, 나는 AWT의 파일 관리자를 사용하여 문제를 해결합니다. 나머지 응용 프로그램이 Swing을 사용하여 만들어 지더라도 잘 작동합니다.
stommestack 2018 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.