2009-08-14 12 views
12

das Problem ist in zentrierten Layout der Komponenten, GridBagLayout immer 'sitzt' in der Mitte von JPanel, so ist es mir egal, wie es Layout-Komponenten innerhalb, mein Problem ist, wo diese Komponenten beginnen, auf einer Platte auszulegen.Wie GridbagLayout nicht zu legen Komponenten in der Mitte von JPanel

Ich habe versucht, mit:

panel.setAlignmentX(JPanel.LEFT_ALIGNMENT); 

aber es hat nicht geholfen.

Irgendeine Idee?

Antwort

19

Sie müssen mindestens eine Komponente hinzufügen, die den horizontalen Raum füllt. Wenn Sie nicht über eine solche Komponente haben, können Sie dies versuchen:

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

Wenn Sie ändern möchten, wenn eine Komponente in einer Zelle durch einen GridBagLayout den Parameter anchor von GridBagConstraints verwenden erstellt befindet.

+0

Das ist nicht genug, Sie müssen eine Komponente haben, die den verbleibenden horizontalen Raum füllt. –

+0

ja ich weiß das; das ist nicht die Frage, das Problem besteht darin, dieses ganze "Gitter" in die linke obere Ecke von JPanel zu setzen, das Elemente hält, die den internen Job von GridBags, Komponenten auszulegen, nicht stören. Nur um GridBag zu sagen: ok, Mann, du machst deinen Job so, wie du willst, setz dich einfach links oben in die Mitte –

+1

@as: Bombe hat Recht, dass du GridBagConstraints.anchor benutzen musst, verpasse gerade das bisschen die Füllkomponente. Ich glaube, ich habe recht, wenn ich sage, dass GridBagLayout JComponent.setAlignmentX und JComponent.setAlignmentY nicht respektiert, die beide auf die Komponente selbst und nicht auf den Inhalt eines Containers zutreffen. –

0

Ich hatte das gleiche Problem wie Sie. Es wurde gelöst, indem dieses Panel mit BorderLayout und NORTH Constraint in ein anderes Panel eingefügt wurde.

Ondrej

0

Sie können es einfach verwenden dieses Dienstprogramm jar painless-gridbag getan. Es machen Sie Ihren Code mit GridBagLayout viel schöner, auch wie

folgenden
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(); 
+0

-1 Ersetzen eines Schmerzes durch einen anderen. Es ist viel nützlicher, nur GridBagLayout zu lernen. –

8

Neben die anchor und fill Felder einstellen, müssen Sie wahrscheinlich das weightx Feld setzen. Dies hilft beim Festlegen des Größenänderungsverhaltens.

Quote:

Sofern Sie mindestens einen Wert ungleich Null für weightx oder gewichtig, alle Komponenten in der Mitte ihres Behälters verklumpen angeben. Dies liegt daran, dass das GridBagLayout bei einer Gewichtung von 0.0 (Standardeinstellung) zusätzlichen Speicherplatz zwischen dem Gitter der Zellen und den Kanten des Containers einnimmt.

Das folgende wird myComponent verankert an der NORTHWEST Ecke halten. Unter der Annahme, this ist JPanel oder ähnlich:

setLayout(new GridBagLayout()); 
GridBagConstraints c = new GridBagConstraints(); 

// Specify horizontal fill, with top-left corner anchoring 
c.fill = GridBagConstraints.HORIZONTAL; 
c.anchor = GridBagConstraints.NORTHWEST; 

// Select x- and y-direction weight. Without a non-zero weight, 
// the component will still be centered in the given direction. 
c.weightx = 1; 
c.weighty = 1; 

// Add child component 
add(myComponent, c); 

zu halten Kind Komponenten linksbündig noch vertikal zentriert, setzen nur anchor = WEST und entfernen weighty = 1;.

0

Sie können das Hauptlayout als Flowlayout festlegen und die Ausrichtung als links festlegen. Fügen Sie in diesem Feld (flowlayout) ein Panel hinzu, das als gridbaglayout bezeichnet wird. auch dies ist in Netbeans

0

gearbeitet Eine andere Lösung ist, dass Sie zwei Dummy-Panel (Container) ganz rechts, am meisten unten hinzufügen. dann passen Sie Gewicht und Gewicht an, um zusätzlichen Raum zu verteilen. Wenn Sie 1 auf den Dummy setzen, dann wird der gesamte zusätzliche Platz diesem Dummy zugewiesen.

Dies ist ein Beispiel in netbeans bilden.

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     
} 
Verwandte Themen