获取Java Swing中组件的布局约束

时间:2013-08-18 03:19:25

标签: java swing layout constraints miglayout

下面是我一直在努力的代码模拟。



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用户界面,当我向pane添加新组件并且我不想复制和粘贴时,我想改变我的用户界面约束。

1 个答案:

答案 0 :(得分:8)

得到解决方案,我必须做以下。


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