我想在面板中布局 4 个组件 A、B、C、D,如下图所示。我可以使用什么布局或方法来做到这一点?
PS如果将A和D并列放置更容易,可以接受。我只希望 D 位于最右边,稍微向北一点,但 A,B ,C 垂直居中在中间。
ABC应该是对齐的。我为我画得不好而感到抱歉。
我想在面板中布局 4 个组件 A、B、C、D,如下图所示。我可以使用什么布局或方法来做到这一点?
PS如果将A和D并列放置更容易,可以接受。我只希望 D 位于最右边,稍微向北一点,但 A,B ,C 垂直居中在中间。
ABC应该是对齐的。我为我画得不好而感到抱歉。
这是一个简单的例子。这将确保 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();
}
}
有很多选择。就像其他人提到的,GridBagLayout
是原生 Java 中最流行和最强大的布局管理器之一。您也可以使用GroupLayout
,我更喜欢它,但对于某些人来说更难理解...但是如果您不反对添加 3rd 方库,那么这些天我几乎都在使用MigLayout。布局约束是字符串,所有东西都相对简单地放在一起。