12
votes

Comment pousser Gridbaglayout à ne pas poser de composants dans le centre de JPanel

Le problème est dans la disposition centrée de composants, le gridbaglayout est toujours "siège" au centre de JPanel, donc je me fiche de la manière dont les composants de la mise en page à l'intérieur, mon problème est l'endroit où ces composants commenceront à présenter sur un panneau.

J'ai essayé avec: xxx

mais cela n'a pas aidé.

aucune idée?


0 commentaires

7 Réponses :


19
votes

Vous devez ajouter au moins un composant qui remplira l'espace horizontal. Si vous n'avez pas un tel composant, vous pouvez essayer ceci:

GridBagConstraints noFill = new GridBagConstraints();
noFill.anchor = GridBagConstraints.WEST;
noFill.fill = GridBagConstraints.NONE;

GridBagConstraints horizontalFill = new GridBagConstraints();
horizontalFill.anchor = GridBagConstraints.WEST;
horizontalFill.fill = GridBagConstraints.HORIZONTAL;    

panel.add(new JLabel("Left Aligned"), noFill);
panel.add(Box.createHorizontalGlue(), horizontalFill);


0 commentaires

0
votes

Si vous souhaitez modifier l'emplacement d'un composant dans une cellule créée par un gridbaglayout Utilisez le paramètre Anchor de GridbagConstraints .


3 commentaires

Cela ne suffit pas, vous devez avoir un composant qui remplit l'espace horizontal restant.


Oui je sais; Ce n'est pas la question, problème consiste à mettre en place toute cette "grille" dans le coin supérieur gauche de JPanel, qui détient des éléments, qui n'interfère pas avec le travail intérieur de la ponture des caractères de grillage. Juste pour dire à Gridbag: OK, Guy, tu fais ton travail comme tu veux, asseyez-vous sur le coin supérieur gauche au lieu de rester au centre


@As: Bombe a raison que vous devez utiliser le gridbagconstraint.Ranchor, il suffit de manquer le peu de la composante de remplissage. Je crois que j'ai raison de dire que Gridbaglayout ne respecte pas JComponent.setalignynmentx et jComponent.setalignmenty, qui s'appliquent tous deux au composant lui-même non du contenu d'un conteneur.



0
votes

J'ai eu le même problème que vous. Résolu en ajoutant ce panneau dans un autre avec limites et contrainte nord.

Ondrej


0 commentaires

1
votes

Vous pouvez le faire en utilisant simplement cet utilitaire jar Double-Gridbag . Il rend également votre code avec Gridbaglayout beaucoup plus jolie, comme suivant

PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);

gbl.row().cell(lblFirstName).cell(txtFirstName).fillX()
        .cell(lblFamilyName).cell(txtFamilyName).fillX();
gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX();

gbl.doneAndPushEverythingToTop();


1 commentaires

-1 substituer une douleur avec une autre. Il est beaucoup plus utile d'apprendre le gridbaglayout.



9
votes

En plus de définir les champs anchor et remplir les champs , vous aurez probablement besoin de définir le champ HeightX . Cela aide à spécifier le comportement de redimensionnement.

citation :

Sauf si vous spécifiez au moins une valeur non nulle pour la perte de poids ou de la lourdeur, tous les composants se blottissent au centre de leur conteneur. En effet, lorsque le poids est de 0,0 (la valeur par défaut), la grillebaglayout met tout espace supplémentaire entre sa grille de cellules et les bords du conteneur.

Ce qui suit conservera myComponent ancré dans le coin du code> Northwest Corner. En supposant que ceci est jPanel ou similaire: xxx

pour garder les composants d'enfants alignés à gauche et centrés à la verticale, juste ensemble Anchor = West et Supprimer Pertey = 1; .


0 commentaires

0
votes

Vous pouvez définir la mise en page principale en tant que FlowLayout et définir l'alignement de la gauche. Dans ce panneau (Flowlayout), ajoutez un panneau qui est gridbaglayout. Aussi, cela est travaillé dans NetBeans


0 commentaires

0
votes

Une autre solution est que vous ajoutez deux panneaux factices (conteneur) au plus à droite, le plus bas. Ensuite, vous ajustez la perte de poids et de la lourdeur pour distribuer un espace supplémentaire. Si vous définissez 1 sur le mannequin, tout d'espace supplémentaire assignez à ce mannequin.

Ceci est un exemple formant dans NetBeans. P>

package tutorial;

/**
 *
 * @author ttn
 */
public class GridBag1 extends javax.swing.JPanel {

    /**
     * Creates new form GridBag1
     */
    public GridBag1() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setLayout(new java.awt.GridBagLayout());

        jLabel1.setText("jLabel1");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        add(jLabel1, gridBagConstraints);

        jTextField1.setText("jTextField1");
        jTextField1.setMinimumSize(new java.awt.Dimension(59, 20));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 0.3;
        add(jTextField1, gridBagConstraints);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 227, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 104, Short.MAX_VALUE)
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridheight = 3;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        add(jPanel1, gridBagConstraints);

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 172, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 196, Short.MAX_VALUE)
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weighty = 1.0;
        add(jPanel2, gridBagConstraints);

        jLabel2.setText("jLabel2");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        add(jLabel2, gridBagConstraints);

        jTextField2.setText("jTextField2");
        jTextField2.setMinimumSize(new java.awt.Dimension(59, 20));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 0.3;
        add(jTextField2, gridBagConstraints);

        jScrollPane1.setMinimumSize(new java.awt.Dimension(104, 64));

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
        add(jScrollPane1, gridBagConstraints);
    }// </editor-fold>                        


    // Variables declaration - do not modify                     
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration                   
}


0 commentaires