我想在面板中布置4个组件A,B,C,D,如下图所示。 我可以用什么布局或方法来做到这一点?
P.S。如果将A和D平行放置更容易,则可以接受。我只是想D最右边有点向北,但A,B,C在中间垂直居中。
A B C应该是对齐的。我对我糟糕的画作感到抱歉。
答案 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();
}
}