我正在尝试在GridBagLayout中对齐3个项目,其中2个在顶部,1个在底部。两个项目的大小应相同。我试图通过BorderLayout和GridBagLayout实现这一目标,但是没有运气。
这是我对GridBagLayout的尝试,因为您可以看到它们未正确对齐。这就是我试图做的。
console.log
我希望这能行得通,因为对于我来说这为什么行不通没有意义,这是代码。
Add first item
Set the x to 1
Add second item
Set the y to 1
Add the last item
我想要实现的结果是
我已经用FlowLayout实现了它,但是当调整框架大小时它并没有打包,并且底部栏有点大。
我该如何使用GridBagLayout或任何其他布局来实现这一点,以便在尺寸更改时保持不变?
答案 0 :(得分:4)
有时,您需要退后一步并尝试其他方法。也许从一张纸开始,您可以在其中绘制布局并绘制约束。
这将使您理解apkPath
必须从x
的{{1}}开始,并“跨越”两列。
当前0
与apkPath
使用的x
位置相同,您需要先对其进行更改,然后才能再次使用。
newPkg
好的,但是现在它的大小与gbc.gridy = 1;
gbc.gridx = 0;
JTextField apkPath = new JTextField();
container.add(apkPath, gbc);
相同,我们需要告诉oldPkg
我们要跨越多列
GridBagLayout
现在应允许文本字段流经这两列
我可能建议看看How to Use GridBagLayout了解更多详情
答案 1 :(得分:-2)
稍微偏离主题: 可能我只是建议不要为90%的内置布局而烦恼,而只是去使用MigLayout。
有一个MigLayout核心罐和MigLayout摆动罐。 (不要误认为MigLayout SWT jar,也不要在import语句中使用SWT版本。)
我想许可证是自由的。但是,您可以检查它是否符合您的需求。
(一个快乐的用户。不隶属于)
这仅需几行就可以做很多事情:
public class LayoutAnswer extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
LayoutAnswer window = new LayoutAnswer();
window.init();
window.pack();
window.setVisible(true);
window.setLocationRelativeTo(null);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
private JPanel panel = new JPanel( new MigLayout("insets 10","[300::, grow][400::, grow]","[100:150:200][100:150:200]") );
private JLabel lbl1 = new JLabel("One");
private JLabel lbl2 = new JLabel("Two");
private JLabel lbl3 = new JLabel("Three");
public void init() {
add(panel, BorderLayout.CENTER);
panel.add(lbl1, "");
panel.add(lbl2, "wrap");
panel.add(lbl3, "span 2");
}
}