2011-12-09 2 views
0

단일 창 Java 프로그램을 만들면 다음과 같은 것을 발견하게됩니다. iOS 개발과 같은 일을 많이하는 경향이 있음을 유의하십시오.Java에서 디자인을 분리하는 논리

+-------------------------------------------------------------------------------+ 
|                    | 
|  ExampleJFrame.java    ExampleJPanel.java      | 
|    |        |        | 
| ExampleJFrameController.java -> ExampleJPanelController.java -> Component(s) | 
|                    | 
+-------------------------------------------------------------------------------+ 

나는 iOS 표준을 따르고 싶습니다. 이것은 내가 얻을 수있는 가장 가까운 곳입니다. 내 질문은 JPanel, 제목, 위치, 크기 등을 설정하는 것과 같은 JFrame과 같은 간단한 작업을 수행하는 경우입니다. (1) 서브 클래스 JFrame 여기서 나는 단지 ExampleJFrame을 가질 것이고 객체는 전술 한 작업을 수행해야합니다. (2) ExampleJFrameController 만 새로 작성하여 JFrame을 만들고 그 제목과 기타 등등을 설정해야합니까?

편집 : 두 번째 옵션을

, 내가 ExampleJFrameController를 서브 클래 싱하기를 원한다면 자식 객체가 그것으로 아무것도 할 수 있기 전에, 부모 개체가 trueJFrame의 가시성을 설정합니다. 그래서 아마도 옵션 3을 추가하는 것을 잊어 버렸을 것입니다 (이는 다소 "그래픽"에 의해 암시됩니다) : ExampleJFrameExampleJFrameController을 모두 가지고 있습니다. ExampleJFrame would set its own size and location and title and ExampleJFrameController would set its visibility. Then lies a problem: if ExampleJFrame should know about ExampleJPanel and ExampleJFrameController should know about ExampleJPanelController , how would I connect the ExampleJPanelController to its ExampleJPanel`? 아니면 그 문제를 해결할 수있는 세부 사항을 놓치고 있습니까?

답변

2

두 번째 옵션을 사용합니다.

Java 코드를 멀리까지 분할하면 정말 멋지게 보이지만 Java 객체를 디자인 할 때 너무 복잡해집니다. 결국 3이나 4에서 쉽게 할 수있는 것을 위해 수십 개의 파일을 갖게됩니다.

첫 번째 옵션을 사용하면 새로운 JFrame을 만들 때마다 새 컨트롤러가 생성됩니다. 두 번째 옵션을 사용하면 기존 컨트롤러 클래스 안에 새로운 객체를 추가 할 수 있습니다.

+2

내부적으로 JFrame을 사용하는 대신'JFrame'을 하위 클래스로 만드는 것은 나쁘지 않은 OOP 스타일이다. 기본적으로 Runnable을 구현하는 대신 Thread를 확장하는 사람들과 같은 문제 – Voo

+0

'JFrame'을'JPanel' 구현체에서 호출하면 부모 클래스의 객체를 호출하고 거기에서부터 이동합니다. 다른 JFrame을 제어해야한다면 위의 다른 컨트롤러 클래스가 필요합니다. 구조를 원합니다.) – Jon

+0

내 의견이 너무 큽니다. 내 편집 좀 봐. –

2

옵션 2를 사용하면 가장 쉽게 관리 할 수 ​​있다고 생각합니다. 또한 완전히 새로운 JFrame을 만들 필요없이 새 컨트롤러를 만들 수 있습니다. 이렇게하면 메모리가 보존되어 프로그램이보다 효율적으로 작동합니다.

+0

기본적으로 Jon이 말한 내용과 동일합니다. ( – Matt

+0

몇 초 쯤에 이길 수 있지만 감사합니다. – Jon

+0

내 것이 20 초 전쯤에 "Just now"였습니다. 하지만 무엇을 했나요? ev, 그는 너의 것을 더 믿을거야 – Matt

관련 문제