2013-08-18 3 views
6

아래는 제가 작업 해본 코드입니다. 컨테이너에서Java 스윙의 구성 요소에 대한 레이아웃 제약 조건 가져 오기



public class Pane { 

    private final JPanel pane; 
    private JPanel namePanel; 
    private final JTextField panIdField; 

    public Pane() { 
     pane = new JPanel(); 
     pane.setLayout(new MigLayout("", "[][grow]", "[][][][][]")); 

     namePanel = new JPanel(); 
     pane.add(namePanel, "cell 1 1,growx"); 

     panIdField = new JTextField(); 
     pane.add(panIdField, "cell 1 2,growx"); 
     panIdField.setColumns(10); 

    } 

    public void replaceNameField(JPanel newNamePanel) { 
     this.namePanel = newNamePanel; 
     // Object constraintsForNamePanel = 
     pane.remove(namePanel); 
     pane.add(newNamePanel, constraintsForNamePanel); 
    } 

} 

우리가 프로그래밍 방식으로 우리가 나중에 사용하기 위해 사용할 수 있도록 getConstraints(...) 같은 우리가 설정 한 constraints을 얻을 수있는 방법이 있나요 방법

public void add(Component comp, Object constraints) 

있다?

내 코드에서 이전 구성 요소를 동일한 위치의 새 구성 요소로 바꾸려면이 코드를 사용하고 싶습니다. 무엇

나는

Object constraintsForNamePanel = 

namePanel에 대한 제약을받을 후에해야한다. 그것은 작동하지만, '문제는 내가 UI에 대한 WindowsBuilder을 사용하고 있으며 내 UI가 같다 나는 pane에 새 구성 요소를 추가 할 때 변경하고 내가 돈 현재

, 나는

pane.add(newNamePanel, "cell 1 1,growx"); 

을 사용하고 있습니다 제약 조건을 복사하여 붙여 넣으려고합니다.

답변

7

해결책을 얻은 후에 다음을 수행해야했습니다.


public void replaceNameField(JPanel newNamePanel) { 
    MigLayout layout = (MigLayout) pane.getLayout(); 
    Object constraintsForNamePanel = layout.getComponentConstraints(this.namePanel); 
    pane.remove(this.namePanel); 

     this.namePanel = newNamePanel; 
     pane.add(newNamePanel, constraintsForNamePanel); 
    } 
관련 문제