이 질문에 대한 사전 조사를 수행하는 동안 인터넷에 Java Swing 모범 사례에 대한 잘 구성된 정보가 많지 않다는 것을 알았습니다. 그래서 저는 하나의 위대한 목록을 만들 때 Stack Exchange에 기회를 줄 것이라고 생각합니다.
Java Swing 개발의 모범 사례는 무엇입니까? 당신을 위해 무엇을 찾았으며 왜 그런가요?
이 질문에 대한 사전 조사를 수행하는 동안 인터넷에 Java Swing 모범 사례에 대한 잘 구성된 정보가 많지 않다는 것을 알았습니다. 그래서 저는 하나의 위대한 목록을 만들 때 Stack Exchange에 기회를 줄 것이라고 생각합니다.
Java Swing 개발의 모범 사례는 무엇입니까? 당신을 위해 무엇을 찾았으며 왜 그런가요?
답변:
나는 나를 위해 일한 것에 대해서만 대답 할 수 있습니다. 다른 의견 제시 자들은 일반적으로 Java GUI가 일반적이지 않은 모양과 느낌의 '비정규의 계곡'에 속한다고 지적했으며, 이에 대해서는 이의를 제기하지 않습니다.
Action API를 잘 활용하십시오. 사용자가 수행 할 다양한 작업을보다 잘 캡슐화하여 바로 가기, 가속기 키, 버튼 및 기타 입력 개체에 훨씬 쉽게 연결할 수 있습니다.
적절한 레이아웃 관리자를 사용하십시오. GridBagLayout은 매우 강력하지만 과도한 의견이 없으면 유지할 수 없다고 말할 수 있습니다. 내가 관리하는 오래된 GUI 응용 프로그램에서 Sonar와 같은 정적 코드 분석 도구를 실행할 때 GridBags 레이아웃을 올바르게 만들기 위해 항상 막대한 양의 마법 숫자를 지적합니다. 픽셀 완벽 정렬을 지정할 필요가없는 GroupLayout으로 많은 성공을 거두었습니다.
JDialog가 필요하다고 생각되면 아마도 필요하지 않을 것입니다. 사용자 경험 측면에서 대화 상자는 끔찍합니다.이 응용 프로그램은 모든 메뉴와 양식에 대화 상자를 사용하고 기괴한 방식으로 항상 가장 규칙을 적용하기로 결정했습니다. 우리가 실제로 메뉴를 통해 무언가를 경고해야 할 때 이것은 유지 보수의 악몽으로 바뀌 었습니다. Cue는 초점이 맞지 않는 (따라서 무시할 수없는) 대화 상자를 클릭하는 것에 좌절했습니다.
적절한 경우 자체 멀티 스레딩을 롤링하는 대신 SwingWorker를 사용하십시오. SwingWorker를 확장하고 GUI에 정기적 인 업데이트를 제공하면서 더 오랜 작업을 수행하는 것은 매우 쉽습니다. 클라이언트 업데이트를 다운로드하십시오. 작업자 스레드 예약을 처리하고 다운로드 비율을 다시보기에 게시 할 수 있으므로 ProgressBar 또는 업데이트 된 내용을 업데이트 할 수 있습니다.
내가 인정할 수있는 경험으로는 그것이 제안 할 수있는 전부입니다.
JDialog
대화 상자에 사용하는 한 완벽하게 좋습니다.
JDialog
)이라는 것입니다.
첫 번째 것 중 하나는 직접 작업하지 않는 것입니다. Swing의 레이아웃 시스템 (IMHO)은 끔찍하며, 실질적인 응용 프로그램을 만드는 것은 악몽입니다.
내가 사용한 많은 대체 레이아웃 관리자 중 두 가지는 MigLayout 및 MultiSplitPane 레이아웃입니다. MigLayout은보다 일반적인 목적으로 생각할 수있는 레이아웃을 쉽고 깔끔하게 만듭니다. MultiSplitPane이 더 구체적입니다. 복잡하지 않은 GUI의 간단한 레이아웃을 만드는 데 사용했습니다.
편집 : 이것은 스윙을 대체하지 않습니다 . Swing을 사용해야하는 경우 이러한 레이아웃 관리자는 스윙 만 관리하고 교체하지 않기 때문에 계속 사용할 수 있습니다.
물론 더 좋은 대안은 Swing을 사용하지 않는 것입니다. 스윙은 작업하기가 끔찍한 것으로 비난을 받았으며, 원어민처럼 보이지 않으며 느리게 보입니다 . Qt, SWT, GTK와 같은 것을하지 말아야 할 것을 스윙으로부터 배운 많은 대안이 존재합니다. 이들은 스윙의 두통에 대한 훌륭한 장기 솔루션입니다
편집 : @Lord Torgamus가 말했듯이 Swing을 강제로 사용하면 실제로 사용할 수 없습니다. 프로젝트를 만들 때이를 최대한 활용하려고하면 레거시 앱을 사용하거나 선택할 때 3/4가 아닌 프로젝트를 만들 때이를 해결하십시오.
또한 대체 GUI의 대부분은 기본 라이브러리를 사용하므로 운영 체제처럼 보인 다음 Swing 또는 다른 Pure Java GUI로 대체됩니다.