gpt4 book ai didi

java - 使用 GridBagLayout 将 JPanel 内的组件居中

转载 作者:行者123 更新时间:2023-12-02 10:54:45 26 4
gpt4 key购买 nike

我试图将一些组件集中在 JPanel 中,当我在 JPanel 的 GridBagLayout 的“自定义布局”选项中按“测试布局”时,一切正常,但当我运行程序时,它看起来有所不同。

它应该看起来像这样: enter image description here

相反,当我运行该程序时,它看起来像这样:

enter image description here

该程序的结构如下:

enter image description here

所以有两个问题:

  1. 密码字段比电子邮件地址字段大。我尝试将它们的最小、最大和首选大小设置为 (14, 22),但它不起作用。

  2. 为什么按钮是分开的以及如何使它们连接? (右侧按钮左Inset为0)

这是 initComponents() 函数:

private void initComponents()
{
java.awt.GridBagConstraints gridBagConstraints;

jPanel1 = new javax.swing.JPanel();
loginButton = new javax.swing.JButton();
signUpLabel = new javax.swing.JLabel();
emailTextField = new javax.swing.JTextField();
passwordField = new javax.swing.JPasswordField();
star1 = new javax.swing.JLabel();
star2 = new javax.swing.JLabel();
loginToggleButton = new javax.swing.JToggleButton();
signUpToggleButton = new javax.swing.JToggleButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setBackground(new java.awt.Color(42, 46, 55));
jPanel1.setLayout(new java.awt.GridBagLayout());

loginButton.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
loginButton.setText("Login");
loginButton.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
loginButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.ipadx = 42;
gridBagConstraints.ipady = 14;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(79, 116, 0, 0);
jPanel1.add(loginButton, gridBagConstraints);

signUpLabel.setFont(new java.awt.Font("Dialog", 1, 13)); // NOI18N
signUpLabel.setText("Don't have an account?");
signUpLabel.setPreferredSize(new java.awt.Dimension(149, 12));
signUpLabel.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mouseClicked(java.awt.event.MouseEvent evt)
{
signUpLabelMouseClicked(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt)
{
signUpLabelMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt)
{
signUpLabelMouseExited(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 6;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(18, 100, 42, 0);
jPanel1.add(signUpLabel, gridBagConstraints);

emailTextField.setMaximumSize(new java.awt.Dimension(14, 22));
emailTextField.setMinimumSize(new java.awt.Dimension(14, 22));
emailTextField.setPreferredSize(new java.awt.Dimension(14, 22));
emailTextField.addFocusListener(new java.awt.event.FocusAdapter()
{
public void focusGained(java.awt.event.FocusEvent evt)
{
emailTextFieldFocusGained(evt);
}
public void focusLost(java.awt.event.FocusEvent evt)
{
emailTextFieldFocusLost(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 6;
gridBagConstraints.gridheight = 2;
gridBagConstraints.ipadx = 199;
gridBagConstraints.ipady = 10;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(97, 70, 0, 0);
jPanel1.add(emailTextField, gridBagConstraints);

passwordField.setMaximumSize(new java.awt.Dimension(14, 22));
passwordField.addFocusListener(new java.awt.event.FocusAdapter()
{
public void focusGained(java.awt.event.FocusEvent evt)
{
passwordFieldFocusGained(evt);
}
public void focusLost(java.awt.event.FocusEvent evt)
{
passwordFieldFocusLost(evt);
}
});
passwordField.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
passwordFieldActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 6;
gridBagConstraints.gridheight = 2;
gridBagConstraints.ipadx = 199;
gridBagConstraints.ipady = 10;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(18, 70, 0, 0);
jPanel1.add(passwordField, gridBagConstraints);

star1.setForeground(new java.awt.Color(255, 0, 0));
star1.setText("*");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 6;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(106, 10, 0, 49);
jPanel1.add(star1, gridBagConstraints);

star2.setForeground(new java.awt.Color(255, 0, 0));
star2.setText("*");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 6;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(25, 10, 0, 49);
jPanel1.add(star2, gridBagConstraints);

loginToggleButton.setBackground(new java.awt.Color(0, 224, 208));
loginToggleButton.setText("Log In");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.ipadx = 34;
gridBagConstraints.ipady = 8;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(44, 0, 0, 0);
jPanel1.add(loginToggleButton, gridBagConstraints);

signUpToggleButton.setBackground(new java.awt.Color(48, 199, 32));
signUpToggleButton.setText("Sign Up");
signUpToggleButton.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
signUpToggleButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.ipadx = 25;
gridBagConstraints.ipady = 8;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(44, 80, 0, 0);
jPanel1.add(signUpToggleButton, gridBagConstraints);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);

pack();
}// </editor-fold>

最佳答案

不要使用setPreferredSize()。

每个 Swing 组件都会根据组件的属性确定自己的大小。在许多情况下,这将基于组件的文本。

对于没有默认文本的文本字段,您应该创建如下组件:

//emailTextField = new javax.swing.JTextField();
//passwordField = new javax.swing.JPasswordField();
emailTextField = new javax.swing.JTextField(20);
passwordField = new javax.swing.JPasswordField(10);

因此组件可以确定其首选大小以显示 20/10 个字符。 (它实际上调整自身大小以显示“W”字符)。

此外,通常不需要设置组件的最小/最大尺寸,因为除非填充单元格,否则 GridBagLayout 将遵循首选尺寸。

关于java - 使用 GridBagLayout 将 JPanel 内的组件居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51857847/

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