6 votes

Obtenir des contraintes de mise en page pour un composant dans Java Swing

Vous trouverez ci-dessous une maquette du code sur lequel j'ai travaillé.

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

}

Dans Container, il y a la méthode

public void add(Component comp, Object constraints)

Existe-t-il un moyen d'obtenir de manière programmatique le numéro de téléphone de la personne à contacter ? constraints que nous définissons, comme getConstraints(...) afin que nous puissions l'utiliser ultérieurement ?

Dans mon code, je veux l'utiliser pour remplacer un ancien composant par un nouveau au même endroit.

Que dois-je faire après

 Object constraintsForNamePanel = 

pour obtenir les contraintes pour namePanel .

Actuellement, j'utilise

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

Cela fonctionne, mais le problème est que j'utilise WindowsBuilder pour l'interface utilisateur et mon interface utilisateur est susceptible de changer lorsque j'ajoute de nouveaux composants à l'interface utilisateur. pane et je ne veux pas copier-coller les contraintes.

8voto

TheKojuEffect Points 3977

J'ai trouvé la solution, j'ai dû faire ce qui suit.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X