2013-08-18 9 views
6

Unten ist ein Mock-up von Code, an dem ich gearbeitet habe.Get Layout-Einschränkungen für eine Komponente in 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); 
    } 

} 

In Container gibt es Verfahren

public void add(Component comp, Object constraints) 

Gibt es eine Möglichkeit, dass wir programmatisch die constraints erhalten können, die wir setzen, wie getConstraints(...) so, dass wir es für eine spätere Verwendung nutzen kann?

In meinem Code möchte ich es verwenden, um eine alte Komponente durch eine neue an der gleichen Stelle zu ersetzen.

Was muss ich tun, nachdem

Object constraintsForNamePanel = 

, um die Einschränkungen für namePanel zu bekommen.

Derzeit bin ich mit

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

Es funktioniert, aber das Problem ist, ich bin mit WindowsBuilder für UI und meine UI ist wie zu ändern, wenn ich neue Komponenten zum pane hinzufügen und I don‘ t wollen die Einschränkungen kopieren und einfügen.

Antwort

7

Bekam die Lösung, ich musste folgendes tun.


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