2013-08-18 34 views
6

下面是我一直在研究的代碼的模擬。在Java Swing中獲取組件的佈局約束條件



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); 
    } 

} 

容器有方法

public void add(Component comp, Object constraints) 

有什麼辦法,我們可以通過編程讓我們設置constraints,像getConstraints(...),使我們可以用它來以後使用?

在我的代碼中,我想用它來替換一箇舊的組件在同一個地方。

我有什麼後做

Object constraintsForNamePanel = 

得到約束namePanel

目前,我使用

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

這是工作,但問題是我使用WindowsBuilder的UI和我的UI是想改變我的時候添加新的組件到pane和我不您想複製並粘貼約束。

回答

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); 
    }