2010-07-21 2 views
0
나는 우리가 JPanel의 & JFrame의 상속 그래픽 클래스에 대한 클래스 디자인에 정착 자바 + 스윙 + miglayout 프로젝트를하고 있어요

자바 :, 여기에 skelletons 그래픽 클래스 제안

class GammaFrame extends JFrame { 
private JPanel __pane__ = null; 

public static GammaFrame open(...) { 

    _instance = GammaFrame() 

    __pane__ = _instance.getContentPane(); 
    __pane__.setLayout(new MigLayout(...)); 

    _instance.__init__() 

    # do logic job if any 

    return _instance; 
    } 

    public static void main(String argv[]) { 
     GammaFrame.open(); 
    } 
} 

class GammaPanel extends JPanel { 

public static GammaPanel create(...) { 

    _instance = GammaPanel() 

    _instance.setLayout(new MigLayout(...)); 

    _instance.__init__() 

    # do logic job if any 

    return _instance; 
    } 

    public static void main(String argv[]) { 
     JPanel panel = GammaPanel.create() 
     JFrame frame = new JFrame() 
     frame.getContentPane().add(panel) 

     # 
     # more settings here 
     # 

     frame.setVisible(true) 
    } 
} 

을 어떻게 될 것인가 이 디자인의 결함?

+2

아니요, 밑줄 없음. 이것은 PHP가 아닙니다 – TheLQ

+0

@ Lord.Quackstar : PHP, Java, Python, Javascript에서 맞춤/공통 템플릿없이 전환하는 것은 불가능합니다. – amirouche

답변

3

큰 단점은 GammaPanelGammaFrame 클래스에서 자동으로 사용되지 않는다는 것입니다.

main 메서드를 사용하여 GUI를 생성하지 마십시오. GammaFrame의 생성자가 해당 구성 요소를 인스턴스화하고 표시하도록 처리해야합니다. 다른 경우에는 main 메서드에서 모든 인스턴스를 인스턴스화해야하지만 여러 프레임과 여러 구성 요소가있는 경우에는 적합하지 않습니다.

일반적으로 콘텐츠가 포함 된 전체 프레임을 사용자 정의 구성 요소 (예 : GammaPanel)의 내부 분류자를 가질 수있는 단 하나의 클래스로 캡슐화하는 경향이 있습니다.

사용자 지정 그래프와 같은 공유 구성 요소를 사용하려는 경우 별도로 선언 한 다음 다른 프레임에서 인스턴스화하고 사용할 수 있습니다.

GUI 구성 요소를 event dispatch thread에 빌드하는 것이 중요합니다.

example에서 제안한대로 모델보기 컨트롤러 디자인의 이점을 고려해 볼 수 있습니다.