2013-08-18 27 views
6

Dưới đây là một giả lập mã mà tôi đang làm việc.Nhận các ràng buộc bố cục cho một thành phần trong 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); 
    } 

} 

Trong container có phương pháp

public void add(Component comp, Object constraints) 

Có cách nào mà chúng ta programatically có thể nhận được constraints mà chúng ta thiết lập, như getConstraints(...) để chúng tôi có thể sử dụng nó cho sau này sử dụng không?

Trong mã của tôi, tôi muốn sử dụng nó để thay thế thành phần cũ bằng một thành phần mới tại cùng một vị trí.

gì làm tôi phải làm sau khi

Object constraintsForNamePanel = 

để có được các khó khăn cho namePanel.

Hiện nay, tôi đang sử dụng

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

Nó đang làm việc nhưng vấn đề là tôi đang sử dụng WindowsBuilder cho giao diện người dùng và giao diện người dùng của tôi cũng giống như thay đổi khi tôi thêm các thành phần mới cho pane và tôi don' t muốn sao chép và dán các ràng buộc.

Trả lời

7

Có giải pháp, tôi phải làm theo.


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); 
    } 
Các vấn đề liên quan