我想在面板中布局4个组件A,B,C,D,如下图所示。 我可以用什么布局或方法来做到这一点?Java Swing布局这些组件
P.S.如果将A和D并行放置更容易,则可以接受。我只想让D最右边,有点向北,但A,B,C垂直居中。
A B C应该对齐。我对我的糟糕绘画感到抱歉。
我想在面板中布局4个组件A,B,C,D,如下图所示。 我可以用什么布局或方法来做到这一点?Java Swing布局这些组件
P.S.如果将A和D并行放置更容易,则可以接受。我只想让D最右边,有点向北,但A,B,C垂直居中。
A B C应该对齐。我对我的糟糕绘画感到抱歉。
有多种选择。像其他人提到的一样,GridBagLayout
是本地Java中最受欢迎和最强大的布局管理器之一。你也可以使用GroupLayout
,我更喜欢它,但是有些人更难缠绕它们......但如果你不反对添加第三方库,那么我现在使用MigLayout来处理大多数事情。布局约束是字符串,一切都相对简单。
下面是一个简单的例子。这将确保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();
}
}
A,B和C的左右边缘是不是故意对齐? – jla
尝试'GridBagLayout'。 –
对于'GridBagLayout',将约束'锚'设置为'FIRST_LINE_END',并填充到'HORIZONTAL'以获得您想要的D。 (如果需要,我可以发布示例。) – Smitty