2012-07-10 2 views
0

예,이 질문은 중복되는 것처럼 보일 수 있지만 나와 함께합니다. 작동하는지, 아래의 코드를 가지고 :JFrame 내부의 JPanel에 대한 참조를 어떻게 동적으로 변경합니까?

private void setMainLayout(Container pane) { 

    String imagePath = Start.getProperty("IMAGE_DIR");  

    characters.add(char1); // pseudocode 
    characters.add(char2); 
    characters.add(char3); 
    characters.add(char4); 

    // "CharacterDisplay.getMainLayout()" returns a Box object: 
    for (CharacterDisplay character : characters) 
     character.getMainLayout().setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.WHITE)); 

    // "mainFrame" is a JFrame: 
    mainFrame.setLayout(new GridBagLayout()); 
    GridBagConstraints gbc = new GridBagConstraints(); 

    /* do random gridbagconstraints stuff */ 

    pane.add(characters.get(0).getMainLayout(), gbc); 

    /* do random gridbagconstraints stuff */ 

    // "nonCharacterArea" is a JPanel:  
    nonCharacterArea.setOpaque(true); 
    nonCharacterArea.setBackground(Color.BLACK); 
    nonCharacterArea.setLayout(new GridBagLayout()); 
    GridBagConstraints constCenter = new GridBagConstraints(); 

    /* do random gridbagconstraints stuff */ 

    nonCharacterArea.add(actionPane, constCenter); // actionPane is a kind of JPanel 

    /* do random gridbagconstraints stuff */   

    nonCharacterArea.add(menuPane, constCenter); // menuPane is a kind of JPanel 
    pane.add(nonCharacterArea, gbc); 

    /* do random gridbagconstraints stuff */  

    pane.add(characters.get(1).getMainLayout(), gbc); 

    gbc.gridx = 0; 
    gbc.gridy = 2;  

    pane.add(characters.get(2).getMainLayout(), gbc); 

    gbc.gridx = 2; 
    gbc.gridy = 2;   

    pane.add(characters.get(3).getMainLayout(), gbc); 
} // setMainLayout 

내가 실행 중에 동적으로 actionPane 개체를 변경할 수 있도록합니다. 가장 좋은 방법은 무엇입니까? 나는이 pseudo-code 블록을 작성하여 특히 사람들이 유사한 질문에 게시 한 다른 예제처럼 단순하지 않다는 것을 보여줍니다. 화면의 특정 지점에서 JPanel의 정확한 배치를 기반으로하기 때문에이 setMainLayout actionPane 객체 만 변경할 때마다() 메서드를 호출하지 않아도됩니다.

때로는 측면 스크롤링 화면이 될 수도 있고 때로는 상점 인터페이스가 될 수도 있으며, 다양한 종류의 것들이 될 수 있습니다.

아이디어가 있으십니까? 감사.

답변

3

actionPane을 추가 및 제거하지 마십시오. 그 자리에 두지 만 하위 구성 요소는 actionPane에 추가/제거하십시오. actionPane에는 단일 구성 요소 만 있기 때문에이 작업은 비교적 간단합니다.

4

actionPane이 비교적 작은 라이브 업데이트 및 변경으로 미리 정의 된 작은 패널 세트에서 가져온 경우 좋은 옵션은 CardLayout을 사용하고 필요에 따라 미리 정의 된 actionPanes 사이를 전환하는 것입니다.

actionPane이 매우 다이나믹하고 실제로 미리 예상 할 수없는 경우 @Greg Kopff는 합리적인 답을 갖고 있습니다.

관련 문제