我试图将某些组件放在JPanel内部,当我在JPanel的GridBagLayout的“ Customize Layout”选项中按“ Test Layout”时,一切正常,但是运行该程序时看起来却有所不同。
相反,当我运行程序时,它看起来像这样:
程序的结构如下:
所以有两个问题:
密码字段大于电子邮件地址字段。我尝试将两者的最小值,最大值和首选大小都设置为(14,22),但这是行不通的。
为什么将按钮分开,如何使它们连接? (右键具有0个左Inset)
这是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>
答案 0 :(得分:1)
不要使用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将遵循首选大小。
答案 1 :(得分:0)
您是否尝试过使用其他gridBagConstraints变量?对两个不同的组件不这样做可能会导致一些问题。
public class TestStack {
private static JTextField txtOne;
private static JTextField txtTwo;
public static void main(String[] args) {
JFrame frame = new JFrame();
GridBagLayout gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = new int[]{0, 0};
gridBagLayout.rowHeights = new int[]{0, 0, 0, 0};
gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
frame.getContentPane().setLayout(gridBagLayout);
txtOne = new JTextField();
txtOne.setHorizontalAlignment(SwingConstants.CENTER);
txtOne.setText("one");
GridBagConstraints gbc_txtOne = new GridBagConstraints();
gbc_txtOne.insets = new Insets(0, 0, 5, 0);
gbc_txtOne.gridx = 0;
gbc_txtOne.gridy = 0;
frame.getContentPane().add(txtOne, gbc_txtOne);
txtOne.setColumns(10);
txtTwo = new JTextField();
txtTwo.setHorizontalAlignment(SwingConstants.CENTER);
txtTwo.setText("twodwqadadsadasdsa");
GridBagConstraints gbc_txtTwo = new GridBagConstraints();
gbc_txtTwo.insets = new Insets(0, 0, 5, 0);
gbc_txtTwo.gridx = 0;
gbc_txtTwo.gridy = 1;
frame.getContentPane().add(txtTwo, gbc_txtTwo);
txtTwo.setColumns(10);
JLabel lblThree = new JLabel("three");
lblThree.setHorizontalAlignment(SwingConstants.CENTER);
GridBagConstraints gbc_lblThree = new GridBagConstraints();
gbc_lblThree.gridx = 0;
gbc_lblThree.gridy = 2;
frame.getContentPane().add(lblThree, gbc_lblThree);
frame.setVisible(true);
}
}
尝试
答案 2 :(得分:0)
我不确定密码字段,但是对于分开的按钮,您可以创建一个具有框形布局的新面板。然后,您可以在其中放置按钮。之后,您可以将新面板放入主面板中。这在我当前的项目中有效。希望它也对您有用。