[英]Problems implementing GridBagLayout in Java
我正在嘗試為要構建的程序制作的“登錄”對話框用Java實現GridBagLayout。 我要使用干凈的Google登錄名。我遇到的主要問題是,使用GridBagConstraints
設置的約束不起作用。 這是我希望對話框顯示的樣子。
這是我嘗試實現的對話框的代碼。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Login_Dialog extends JDialog{
// SEtting up the required components for the sign in
/**
*
*/
private static final long serialVersionUID = 1L;
protected JLabel username_Label = new JLabel("Username");
protected JLabel password_Label = new JLabel("Username");
protected JTextField username_Field = new JTextField(30);
protected JTextField password_Field = new JTextField(30);
protected JButton sign_In = new JButton("Sign in!");
public Login_Dialog() {
setSize(600,400);
setTitle("Sign in");
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
add(username_Label);
c.fill = GridBagConstraints.HORIZONTAL;
// c.weightx = 0.5;
c.gridx = 1;
c.gridy = 0;
add(username_Field);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 2;
add(password_Label);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 4;
add(password_Field);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 5;
add(sign_In);
setVisible(true);
}
}
更新:
我進行了一些更改,似乎可以達到我想要的結果。 現在的問題是,所有內容都居中並且按鈕的長度太寬。 另外,我希望文本字段和標簽更大。
這是GridBagLayout
的更新
//cusotmization of buttons
Dimension signD = sign_In.getPreferredSize();
signD.height = 50;
signD.width = 30;
sign_In.setPreferredSize(signD);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
add(username_Label,c);
c.fill = GridBagConstraints.HORIZONTAL;
// c.weightx = 0.5;
c.gridx = 0;
c.gridy = 1;
add(username_Field,c);
c.fill = GridBagConstraints.HORIZONTAL;
// c.weightx = 0.5;
c.gridx = 0;
c.gridy = 2;
add(password_Label,c);
c.fill = GridBagConstraints.HORIZONTAL;
// c.weightx = 0.5;
c.gridx = 0;
c.gridy = 3;
add(password_Field,c);
//
// c.fill = GridBagConstraints.HORIZONTAL;
// c.weightx = 0.5;
c.gridx = 0;
c.gridy = 5;
//
add(sign_In,c);
您必須在add()
添加約束對象
范例:
add(username_Field, c);
其中c
是您的GridBagConstraints。
這是一個完整的例子:
package gui;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
@SuppressWarnings("serial")
public class LoginPanel extends JPanel
{
private static final Dimension TFIELD_SZ = new Dimension(120, 20);
public LoginPanel()
{
super(new GridBagLayout());
final GridBagConstraints cst = new GridBagConstraints();
cst.insets = new Insets(0, 5, 0, 5);
cst.weightx = 0.5;
cst.weighty = 0.5;
cst.anchor = GridBagConstraints.LINE_START;
// Username
cst.gridx = 0;
cst.gridy = 0;
this.add(new JLabel("Username:"), cst);
cst.gridy = 1;
cst.gridwidth = 2;
final JTextField uTField = new JTextField();
uTField.setMinimumSize(TFIELD_SZ);
uTField.setPreferredSize(TFIELD_SZ);
this.add(uTField, cst);
// Password
cst.gridwidth = 1;
cst.gridy = 2;
this.add(new JLabel("Password:"), cst);
cst.gridy = 3;
cst.gridwidth = 2;
final JTextField pwTField = new JTextField();
pwTField.setMinimumSize(TFIELD_SZ);
pwTField.setPreferredSize(TFIELD_SZ);
this.add(pwTField, cst);
// Buttons
cst.anchor = GridBagConstraints.CENTER;
cst.gridy = 4;
cst.gridwidth = 1;
this.add(new JButton("Sign in"), cst);
cst.gridx = 1;
this.add(new JButton("Sign up"), cst);
}
public static void main(final String[] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
final JDialog myDialog = new JDialog();
myDialog.setTitle("Sign in");
myDialog.setSize(180, 170);
myDialog.setContentPane(new LoginPanel());
myDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
myDialog.setVisible(true);
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.