2013-08-18 38 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); 
    }