Java Swing 앱에서 창 관리를위한 디자인 패턴


9

방금 첫 번째 작은 Java Swing 앱을 만들기 시작했습니다. 프로그램이 열리면 레이블과 몇 개의 버튼이있는 하나의 간단한 창이 나타납니다. 해당 버튼 중 하나를 클릭하면 시작 화면이 사라지고 완전히 다른 패널로 교체됩니다.

해당 기능을 만드는 가장 좋은 방법이 무엇인지 잘 모르겠습니다. 한 가지 방법은 JFrame다른 모든 구성 요소에 대한 논쟁으로 나를 전달하는 것입니다. 그러나 그것은 나에게 해키 느낌입니다. 또는 각 패널을 액션 리스너로 두 배로 만들지 만 옳지 않은 것처럼 보입니다.

여기에 적용해야 할 디자인 패턴이 있습니까? "메인 창의 유일한 내용을 바꾸십시오"는 합리적으로 일반적인 작업이어야합니다. 패턴의 이름으로 충분합니다. 거기서 직접 Google을 사용할 수 있습니다. (하지만 더 이상 설명을 거부하지는 않을 것입니다.)


이것은 실제 프로그래밍 기술에 대한 질문이므로 스택 오버플로에 대해 더 많은 답변을 얻을 수 있습니다.
Alex Feinman

답변:


6

Swing 앱을 빌드 할 때는 보통 중재자 패턴을 기준으로합니다. 이 패턴에서 중재자 클래스 (일반적으로 기본 JFrame)는 다른 GUI 부분 (일반적으로 JPanels, JMenus ...)을 처리하고 이들 사이의 통신을 관리합니다.

예를 들어, JPanel1에서 이벤트가 발생한 경우 JPanel1은 중개자 (JFrame)에게 알립니다. JFrame은 JPanel2를 수정하여 조치를 취합니다.

참고 : 모든 프로젝트는 중소형 GUI 앱이므로이 패턴이 제대로 확장되는지 잘 모르겠습니다. 그러나 적절한 아키텍처를 설계 할 수 있다면 중재자 패턴이 견고한 기반이 될 수 있습니다.


4

기본 메소드가 JDialog를 표시하도록 할 수 있습니다. 대화 상자가 닫히면 기본 JFrame이 생성되어 표시됩니다.

JDialog는 사용자 정의 컨텐츠와 버튼이있는 대화 상자를 표시하고 클릭 한 버튼의 코드를 반환하는 사용하기 쉬운 정적 메소드를 제공합니다. 이 값을 테스트함으로써 메인 메소드는 메인 프레임을 표시하거나 종료 (또는 기타)를 결정할 수 있습니다. Javadoc을 읽으십시오.

일부 오래된 UI 프레임 워크와 달리 Swing 응용 프로그램은 특정 프레임이나 창에 연결되지 않습니다. 원하는만큼 창을 만들 수 있습니다. 모든 스레드가 종료되면 응용 프로그램이 종료되고 모든 창이 폐기 된 경우에는 종료되지 않습니다. 이것은 일반적으로 System.exit (0)으로 달성됩니다.

그 경우에 대한 특정 디자인 패턴이 있는지 모르겠습니다. Java Swing 튜토리얼을 추천합니다.


1
-1. 이것은 디자인 패턴 질문입니다. 내가받은 사양을 변경하고 "특정 디자인 패턴이 있는지 모르겠습니다"로 끝나는 것이 좋습니다.

2
그의 대답은 매우 정확합니다. 양식과 대화 상자가 먼저 작동하는 방법을 배우는 데 필요한 디자인 패턴 문제가 없습니다.
Alex

2

많은 UI 프레임 워크에는 '기본'또는 '활성'창과 관련된 규칙이 다릅니다. 이러한 복잡성을 관리하는 한 가지 방법은 주 메시지 루프를 제어하는 ​​주 창을 보이지 않는 창 (또는 특히 성가신 프레임 워크를위한 작은 크롬리스 1 픽셀 창)으로 만드는 것입니다. 그런 다음 다른 모든 창과 대화 상자를 해당 창의 자식으로 만듭니다.

이 방법은 특히 전역 로깅 및 마우스 이벤트를 처리 할 때뿐만 아니라 최상위 수준의 로깅 및 예외 처리에서 많은 이점을 제공합니다.

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