2013-10-04 108 views
0

我想在面板中佈局4個組件A,B,C,D,如下圖所示。 我可以用什麼佈局或方法來做到這一點?Java Swing佈局這些組件

P.S.如果將A和D並行放置更容易,則可以接受。我只想讓D最右邊,有點向​​北,但A,B,C垂直居中。

A B C應該對齊。我對我的糟糕繪畫感到抱歉。

enter image description here

+0

A,B和C的左右邊緣是不是故意對齊? – jla

+1

嘗試'GridBagLayout'。 –

+0

對於'GridBagLayout',將約束'錨'設置爲'FIRST_LINE_END',並填充到'HORIZONTAL'以獲得您想要的D。 (如果需要,我可以發佈示例。) – Smitty

回答

0

有多種選擇。像其他人提到的一樣,GridBagLayout是本地Java中最受歡迎和最強大的佈局管理器之一。你也可以使用GroupLayout,我更喜歡它,但是有些人更難纏繞它們......但如果你不反對添加第三方庫,那麼我現在使用MigLayout來處理大多數事情。佈局約束是字符串,一切都相對簡單。

0

下面是一個簡單的例子。這將確保D組件始終位於右上角,並且A,B,C組件始終處於中心位置。運行它並拖動框架。你會看到D組件總是在面板的右上角。

import java.awt.*; 
import javax.swing.*; 

public class Test { 

    public Test() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
     frame.add(new MyPanel()); 
     frame.pack(); 
     frame.setMinimumSize(frame.getPreferredSize()); 
     frame.setVisible(true); 
    } 

    class MyPanel extends JPanel {  
     public MyPanel() { 
      JTextField labelA = new JTextField("Your A component"); 
      JTextField labelB = new JTextField("Your B component"); 
      JTextField labelC = new JTextField("Your C component"); 
      JTextField labelD = new JTextField("Top Right D"); 

      JPanel north = new JPanel(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.anchor = GridBagConstraints.FIRST_LINE_END; 
      gbc.weightx = 1; 
      gbc.insets = new Insets(10, 10, 10, 10); 
      north.add(labelD, gbc); 

      JPanel south = new JPanel(new GridBagLayout()); 
      gbc.anchor = GridBagConstraints.CENTER; 
      gbc.gridy = 0; 
      south.add(labelA, gbc); 
      gbc.gridy = 1; 
      south.add(labelB, gbc); 
      gbc.gridy = 2; 
      south.add(labelC, gbc); 

      setLayout(new BorderLayout()); 
      add(north, BorderLayout.NORTH); 
      add(south, BorderLayout.CENTER); 
     } 
    } 

    public static void main(String[] args) { 
     new Test(); 
    } 
}