0

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

PS如果将A和D并列放置更容易,可以接受。我只希望 D 位于最右边,稍微向北一点,但 A,B ,C 垂直居中在中间。

ABC应该是对齐的。我为我画得不好而感到抱歉。

在此处输入图像描述

4

2 回答 2

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();
    }
}
于 2013-10-04T23:59:49.103 回答
0

有很多选择。就像其他人提到的,GridBagLayout是原生 Java 中最流行和最强大的布局管理器之一。您也可以使用GroupLayout,我更喜欢它,但对于某些人来说更难理解...但是如果您不反对添加 3rd 方库,那么这些天我几乎都在使用MigLayout。布局约束是字符串,所有东西都相对简单地放在一起。

于 2013-10-04T22:48:08.577 回答