2013-10-04 68 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(); 
    } 
}