gpt4 book ai didi

java - GridBagLayout - 向约束添加边距以将组件从中心移动到顶部

转载 作者:行者123 更新时间:2023-12-03 02:49:26 27 4
gpt4 key购买 nike

我正在开发我的第一个应用程序来练习布局管理器,我开始学习 GridBagLayout,我想创建一个带有 Logo 和登录框的登录窗口。

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

img
(来源:gyazo.com)

我觉得 Logo 距离登录框太近,距离顶部太远 - 因此我需要找到一种方法让 Logo 从底部留出边距,这样它就会稍微靠近顶部,因此两个组件之间会有一个空格,并且 Logo 将位于顶部栏附近。

可以用GridBagLayout来做吗?

我尝试将 Insets 设置为 0, 0, 0, 110,它会将 Logo 向左移动一点,但不知道为什么。

@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);
}

我该怎么做?

最佳答案

您可以使用其他属性来更好地控制组件的宽度和高度(以百分比为单位)。

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

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

它在How to Use GridBagLayout上的Swing教程下得到了更好的扩展。

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

<小时/>
  • 使用 frame.pack() 而不是 frame.setSize(),根据组件的首选尺寸来适合组件。

  • 重写 getPreferredSize() 以设置 JPanel 的首选大小,而不是使用 setSize() 方法。

示例代码:

JPanel panel = new JPanel() {

@Override
public Dimension getPreferredSize() {
return new Dimension(..., ...);
}
};

关于java - GridBagLayout - 向约束添加边距以将组件从中心移动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24970760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com