GridBagLayout - 为约束添加边距,将组件从中心移到顶部

Art*_*545 2 java user-interface swing layout-manager gridbaglayout

我正在研究第一个练习布局管理器的应用程序,我开始学习GridBagLayout,我想创建一个带有徽标和登录框的登录窗口.

目前我的应用程序如下所示:

img http://gyazo.com/a3a74033e71d4c24caa142af0ff3aa63.png

我觉得徽标离登录框太近了,远离顶部 - 因此我需要找到一种方法从底部给徽标一个边距,所以它有点到顶部,所以会有是两个组件之间的空间,徽标将在顶部栏附近.

是否可以使用GridBagLayout?

我已经尝试过设置Insets,0, 0, 0, 110它会将徽标向左移动一点,不知道为什么.

@Override
public void init() throws Exception {
    GridBagLayout layout = new GridBagLayout();
    super.setLayout(layout);
    this.loginPane = new JPanel();
    this.loginPane.setSize(400, 400);
    this.loginPane.setBackground(Color.RED);
    JTextField username = new JTextField();
    username.setSize(200, 45);

    BufferedImage logo = ImageIO.read(new File("assets/logo.png"));
    JLabel logoLabel = new JLabel(new ImageIcon(logo));

    GridBagConstraints t = new GridBagConstraints();
    t.ipadx = logo.getWidth();
    t.ipady = logo.getHeight();
    t.gridx = 0;
    t.gridy = 0;

    super.add(logoLabel, t);
    t.ipadx = 500;
    t.ipady = 300;
    t.gridwidth = 1;
    t.gridheight = 1;
    t.gridy++;
    super.add(loginPane, t);
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Bra*_*raj 5

您还可以使用其他属性来更好地控制组件的宽度和高度(以百分比表示).

  • weightx 指定如何分配额外的水平空间.

  • weighty 指定如何分配额外的垂直空间.

Swing教程如何使用GridBagLayout可以更好地扩展它

尝试t.weighty=0.5;将两者分开50%-50%并将组件放在中心.并让我知道它是否符合您的需要?


  • 使用frame.pack()而不是frame.setSize()根据组件的首选大小拟合组件.

  • 覆盖getPreferredSize()以设置首选大小JPanel而不是使用setSize()方法.

示例代码:

JPanel panel = new JPanel() {

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(..., ...);
    }
};
Run Code Online (Sandbox Code Playgroud)