Java Swing布局这些组件

时间:2013-10-04 22:18:50

标签: java swing layout user-interface awt

我想在面板中布置4个组件A,B,C,D,如下图所示。 我可以用什么布局或方法来做到这一点?

P.S。如果将A和D平行放置更容易,则可以接受。我只是想D最右边有点向北,但A,B,C在中间垂直居中。

A B C应该是对齐的。我对我糟糕的画作感到抱歉。

enter image description here

2 个答案:

答案 0 :(得分:0)

有很多选择。与其他人提到的一样,GridBagLayout是本机Java中最受欢迎和最强大的布局管理器之一。你也可以使用我更喜欢的GroupLayout,但是对于一些人来说更难以解决...但如果你不反对添加第三方库,我会使用{{3对于这些天来的大多数事情。布局约束是字符串,所有内容组合起来相对简单。

答案 1 :(得分: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();
    }
}