2012-10-23 30 views
3

我在Java中設置GroupLayout時遇到問題。GroupLayout對齊問題

我的代碼如下。對於組件所需的位置是:

++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+LABEL_A  caseStudyComboBox   LABEL_B + 
+LABEL_C  TextfieldE     BtnD + 
++++++++++++++++++++++++++++++++++++++++++++++++++++ 

代替上述的,輸出的是:

+++++++++++++++++++++++++++++++++++++++++++++++++++ 
+LABEL_A           + 
+    caseStudyCombBox     + 
+         LABEL_B  + 
+  LABEL_C IS LONGER THAN A:     + 
+        TextfieldE  + 
+           BtnD + 
+++++++++++++++++++++++++++++++++++++++++++++++++++ 

請提出了一些補救措施。 謝謝。

import java.awt.Component; 
import java.awt.Dimension; 

import javax.swing.*; 
import static javax.swing.GroupLayout.Alignment.*; 

public class EXP1 extends JFrame { 
String [] caseStudyList = { 
     "", 
     "Case A", 
     "Case B" 
}; 
// 
public EXP1() { 
    JLabel Label_A = new JLabel("LABEL A "); 
    JComboBox caseStudyComboBox = new JComboBox(caseStudyList); 
    JLabel Label_B = new JLabel("LABEL B"); 
    JLabel Label_C = new JLabel("LABEL C IS LONGER THAN A: "); 
    JButton BtnD = new JButton("BUTTON D"); 
    JTextField TextFieldE = new JTextField(); 

    GroupLayout layout = new GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setAutoCreateGaps(true); 
    layout.setAutoCreateContainerGaps(true); 

    layout.setHorizontalGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(TRAILING)) 
       .addComponent(Label_A, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(Label_C, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addGroup(layout.createParallelGroup(LEADING)) 
       .addComponent(caseStudyComboBox, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(TextFieldE, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addGroup(layout.createParallelGroup(LEADING)) 
       .addComponent(Label_B, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(BtnD, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 

    layout.linkSize(SwingConstants.HORIZONTAL, Label_B, BtnD); 

    layout.setVerticalGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(BASELINE)) 
       .addComponent(Label_A) 
       .addComponent(caseStudyComboBox) 
       .addComponent(Label_B) 
      .addGroup(layout.createParallelGroup(LEADING)) 
       .addComponent(Label_C) 
       .addComponent(TextFieldE) 
       .addComponent(BtnD) 
    ); 

    setTitle("EXPERIMENT"); 
    this.pack(); 
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
} 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    //BPAOntoEIAUI mainUI = new BPAOntoEIAUI(); 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       UIManager.setLookAndFeel(
           "javax.swing.plaf.metal.MetalLookAndFeel"); 
          // "com.sun.java.swing.plaf.motif.MotifLookAndFeel"); 
          //UIManager.getCrossPlatformLookAndFeelClassName()); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
      new EXP1().setVisible(true); 
     } 
    }); 
} 
} 

回答

3

當您設置水平和垂直組時,看起來有點與括號有混淆。這些控件不屬於您創建的預定組。

代替

layout.setHorizontalGroup(layout.createSequentialGroup() 
.addGroup(layout.createParallelGroup()) 
.addComponent(Label_A) 
.addComponent(Label_C) 

它實際上應該是:

layout.setHorizontalGroup(layout.createSequentialGroup() 
.addGroup(layout.createParallelGroup() 
.addComponent(Label_A) 
.addComponent(Label_C)) 

在第一種情況下,你要添加標籤的順序組,而不是像在第二種情況下,平行組。

這裏是用下面的略作修改的代碼的結果:

enter image description here

layout.setHorizontalGroup(layout.createSequentialGroup() 
     .addGroup(layout.createParallelGroup(TRAILING) 
      .addComponent(Label_A, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(Label_C, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     .addGroup(layout.createParallelGroup(LEADING) 
      .addComponent(caseStudyComboBox, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(TextFieldE, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     .addGroup(layout.createParallelGroup(LEADING) 
      .addComponent(Label_B, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(BtnD, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
); 

layout.linkSize(SwingConstants.HORIZONTAL, Label_B, BtnD); 

layout.setVerticalGroup(layout.createSequentialGroup() 
     .addGroup(layout.createParallelGroup(BASELINE) 
      .addComponent(Label_A) 
      .addComponent(caseStudyComboBox) 
      .addComponent(Label_B)) 
     .addGroup(layout.createParallelGroup(LEADING) 
      .addComponent(Label_C) 
      .addComponent(TextFieldE) 
      .addComponent(BtnD)) 
);