2013-08-18 19 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) 

があります私たちは、後で使うためにそれを使用できるように、我々はプログラム的getConstraints(...)のように、我々は設定constraintsを得ることができる方法はありますか?

私のコードでは、古いコンポーネントを同じ場所の新しいコンポーネントに置き換えるために使用したいと考えています。

私はnamePanelの制約を取得するために

Object constraintsForNamePanel = 

後に行うには何がありますか。

現在、私はそれが動作しているが、問題は「私は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); 
    } 
関連する問題