2013-07-20 2 views
2

저는 프로그래밍에 익숙하지 않고 Java를 처음 접했습니다. 나는 올 가을 컴퓨터 과학에서 수업을 시작하기 전에 자신을 가르치고 있는데 나는 두 명의 다른 저자에게서 본 문법에 대한 호기심이있다. 한 권의 책에서 , JFrame의 보통JFrame을 설정하는 구문입니다. 어느 것이 맞습니까?

public class MyClass extends JFrame { 

는 등

그러나, 또 다른 저자는, 또한이 사이트에 대한 질문은 일반적으로 클래스와 내부 프레임을 설정하는 클래스를 JFrame의의 확장함으로써 설립 같은 :

public class MyClass { 
JFrame frame = new JFrame(); 

첫째, 다른 통해 하나의 장점은 무엇입니까? JFrame의 확장 클래스를 사용하면 프레임의 매개 변수를 설정하고 구성 요소를 더 쉽게 추가 할 수 있다는 것이 나에게는 잘 알려져 있습니다.

IE 확장 형식으로는 단순히 다른 형식으로, 필수 유형에, 그러나

add(component); 

말 :

frame.getContentPane().add(component); 

어떤 더 지루한 것 같다.

사람이 뒤에 간결 이유를 설명시겠습니까 또는 단순히 취향의 문제입니다 경우. 나는 이것을 조사해 왔으며 앞으로 곧바로 답을 얻을 수 없었다.

답변

5

이 많은 (I 포함) 철학적, 실제적인 이유에게 있습니다 후자를 선호 :

  • 일반적으로 상속을 통해 구성을 선호합니다.
  • 선천적 인 동작 (예 : 하나 이상의 메서드를 재정의)을 변경하려는 경우에만 클래스를 확장하십시오. JFrame의 연장하지 않음으로써
  • , 응집력을 극대화 클래스를 생성하고 커플 링을 최소화하고 깨끗한 MVC 기반의 코드를 작성하는 것이 더 쉽습니다. 이 개념의 더 중요한 예는 GUI 코드 (당신의 보기 코드) 모든 리스너 인터페이스 (당신의 제어 코드)를 구현을 피하기 위해입니다. 베이비 프로그램은 괜찮지 만 복잡해 질 가능성이있는 어른 용 코드는 아닙니다.
  • JFrame과 같이 크고 복잡한 클래스를 확장하지 않으면 숨겨진 무시 오버 헤드를 디버그하기가 어렵습니다. JFrame 또는 JPanel을 확장하고 클래스에 getX()getY() 메소드를 제공하면 어떤 의미인지 알 수 있습니다! 당신은 JFrame의 같은 거대한 복잡한 클래스를 오버라이드 (override)하지 않는 경우,
  • 당신이 당신의 클래스의 객체에 가능한 방법의 제안을 제공하는 IDE를 사용하는 경우, 당신은 크게 가능한 제안 방법의 수 (복잡성)을 줄일 수 있습니다.
  • Swing GUI를 사용하여 JFrame을 덮어 쓰지 않고 JPanels를 만들면 GUI 사용 방법의 유연성이 크게 높아집니다. 이제는 JDialog, JOptionPane, JApplet, 다른 JPanel 내부에 더 복잡한 GUI의 일부로 또는 CardLayout 뷰 스왑의 일부로 배치 될 수 있습니다 .... 그리고 계속해서 갈 수 있습니다.
  • 위의 것과 동일한 토큰에서 많은 GUI가 JPanels를 만듭니다. JPanels를 만들면 작은 테스트 프로그램으로 JFrames에 넣음으로써 격리되어 테스트 할 수 있습니다.
+1

감사합니다. 아주 좋은 설명. 나는 당신이 당신의 대답에 넣은 예와 시간을 크게 감사합니다. 또한이 두 가지 방법의 장점과 단점을 이해하기가 쉽습니다. –

+1

@JeremyJohnson : 환영합니다. 의견에 감사드립니다. –

3

는 전통적으로 당신은 프레임의 특별한 유형을 생성하지 않는, 그래서 당신은 JFrame의 연장해서는 안된다.

당신은 JFrame의를 만들고 그 안에 내용을 넣어, 그래서 후자의 방법이보다 더 낫다입니다 있습니다.

e.e. 객체 지향적 인 관점에서 볼 때, JFrame을 사용하는 것이 더 깔끔합니다.

+0

답장을 보내 주셔서 감사합니다. 제공된 두 답변 모두 나를위한 딜레마를 해결했으며이 새 질문에 답하는 데 시간을 크게 바라고 있습니다. –

관련 문제