gpt4 book ai didi

java - JTextField 宽度在 GridBagConstraints java 中不起作用

转载 作者:行者123 更新时间:2023-12-01 06:04:59 31 4
gpt4 key购买 nike

我想减小用户名和密码旁边的文本字段的宽度,使它们不是 100% 宽度,但我不知所措。
用户名和密码 TextField 添加到以下代码中的 GridBagConstraints 内:

public class LoginPage extends JPanel {
private ActionListener action;
private JLabel scanningJLabel;
private JLabel loginJLabel;
private JLabel passwordJLabel;
private JTextField usernameJTextField;
private JPasswordField passwordJPasswordField;
private JButton configureJButton;

public LoginPage() {
init();
}

private void init() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JPanel content = new JPanel(new GridBagLayout());
content.setBorder(new EmptyBorder(20, 20, 20, 20));
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;

scanningJLabel = new JLabel();
loginJLabel = new JLabel();
passwordJLabel = new JLabel();
usernameJTextField = new JTextField();
passwordJPasswordField = new JPasswordField();
configureJButton = new JButton();

scanningJLabel.setHorizontalAlignment(SwingConstants.CENTER);
scanningJLabel.setForeground(new Color(0, 0, 255));
scanningJLabel.setText("Scanning");

loginJLabel.setFont(loginJLabel.getFont().deriveFont(18.0f));
loginJLabel.setHorizontalAlignment(SwingConstants.LEFT);
loginJLabel.setForeground(new Color(0, 0, 255));
loginJLabel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
loginJLabel.setText("User Name");

passwordJLabel.setFont(passwordJLabel.getFont().deriveFont(18.0f));
passwordJLabel.setHorizontalAlignment(SwingConstants.LEFT);
passwordJLabel.setForeground(new Color(0, 0, 255));
passwordJLabel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
passwordJLabel.setText("Password");

usernameJTextField.setFont(loginJLabel.getFont().deriveFont(18.0f));
usernameJTextField.setHorizontalAlignment(SwingConstants.LEFT);
usernameJTextField.setForeground(new Color(0, 0, 255));
usernameJTextField.setToolTipText("Enter your username");
usernameJTextField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jTextField1_actionPerformed(e);
}
});

passwordJPasswordField.setFont(passwordJLabel.getFont().deriveFont(18.0f));
passwordJPasswordField.setHorizontalAlignment(SwingConstants.LEFT);
passwordJPasswordField.setForeground(new Color(0, 0, 255));
passwordJPasswordField.setToolTipText("Enter your password");
passwordJPasswordField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jPasswordField1_actionPerformed(e);
}
});

usernameJTextField.setBounds(70, 30, 150, 20);
passwordJPasswordField.setBounds(70, 65, 150, 20);

configureJButton.setPreferredSize(new Dimension(140, 40));
configureJButton.setBackground(new Color(204, 204, 204));
configureJButton.setForeground(new Color(0, 0, 255));
configureJButton.setFont(loginJLabel.getFont().deriveFont(16.0f));
configureJButton.setText("Configure");
configureJButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});

add(loginJLabel, gbc);
gbc.gridy++;
add(passwordJLabel, gbc);

gbc.gridx++;
gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
add(usernameJTextField, gbc);
gbc.gridy++;
add(passwordJPasswordField, gbc);

gbc.gridx = 1;
gbc.gridy++;
gbc.gridwidth = 1;
gbc.weightx = 0;
gbc.fill = GridBagConstraints.NONE;
add(configureJButton, gbc);
}
protected void jButton1_actionPerformed(ActionEvent e) {
String username = new String(usernameJTextField.getText());
String password = new String(passwordJPasswordField.getText());
if (username.isEmpty()) {
JOptionPane.showMessageDialog(null, "Username should not be empty", "InfoBox: " + "warning", JOptionPane.INFORMATION_MESSAGE);
return;
}

if (password.isEmpty()) {
JOptionPane.showMessageDialog(null, "Password should not be empty", "InfoBox: " + "warning", JOptionPane.INFORMATION_MESSAGE);
return;
}

if (username.equals("admin") && password.equals("admin")) {
JPanel parent = (JPanel) getParent();
CardLayout cardLayout = (CardLayout) parent.getLayout();
cardLayout.next(parent);
} else {
System.out.println("enter the valid username and password");
JOptionPane.showMessageDialog(null, "Username and Password are not correct, please try again", "InfoBox: " + "warning", JOptionPane.INFORMATION_MESSAGE);
}
}

protected void jTextField1_actionPerformed(ActionEvent e) {
System.out.println("user name given");
}

protected void jPasswordField1_actionPerformed(ActionEvent e) {
System.out.println("password given");
}
}

但它会像这样填充整个屏幕宽度:

TextFields filling 100% width.

此屏幕的主页如下,

public class HomePage {
private static final String CARD_LOGIN = "Card login";
private static final String CARD_CONFIGURE_BRANCH = "Card configure branch";
private static final String CARD_CONFIGURE_SYSTEM = "Card configure system";
private static final String CARD_CONFIGURE_CUSTOMER = "Card configure customer";
private static final String CARD_CONFIGURE_EXPINCONTAINER = "Card configure expin";
private static final String CARD_MAINPAGE = "Card main page";

private static void createAndShowGUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);

// This JPanel is the base for CardLayout for other JPanels.
JPanel contentPane = new JPanel();
contentPane.setLayout(new CardLayout(20, 20));

/* Here we be making objects of the Window Series classes
* so that, each one of them can be added to the JPanel
* having CardLayout.
*/
LoginPage login = new LoginPage();
contentPane.add(login, CARD_LOGIN);
ConfigueBranch configureBranch = new ConfigueBranch();
contentPane.add(configureBranch, CARD_CONFIGURE_BRANCH);
ConfigureSystem configureSystem = new ConfigureSystem();
contentPane.add(configureSystem, CARD_CONFIGURE_SYSTEM);
ConfigureCustomer configureCustomer = new ConfigureCustomer();
contentPane.add(configureCustomer, CARD_CONFIGURE_CUSTOMER);
ConfigureExpincontainer configureExpinContainer = new ConfigureExpincontainer();
contentPane.add(configureExpinContainer, CARD_CONFIGURE_EXPINCONTAINER);
MainPage mainPage = new MainPage();
contentPane.add(mainPage, CARD_MAINPAGE);

/* We need two JButtons to go to the next Card
* or come back to the previous Card, as and when
* desired by the User.
*/
JPanel buttonPanel = new JPanel();
ImageIcon icon = new ImageIcon("images/expd_logo.png");

Image image = icon.getImage(); // transform it
Image newimg = image.getScaledInstance(230, 100, java.awt.Image.SCALE_SMOOTH); // scale it the smooth way
icon = new ImageIcon(newimg); // transform it back
JLabel label = new JLabel("", icon, JLabel.LEFT);
label.setFont(new java.awt.Font("Arial", Font.BOLD, 24));
label.setOpaque(true);
label.setForeground(Color.BLACK);
label.setBounds(0, 60, 300, 200);
buttonPanel.add(label);

// Adding the contentPane (JPanel) and buttonPanel to JFrame.
frame.add(contentPane, BorderLayout.CENTER);
frame.add(buttonPanel, BorderLayout.PAGE_START);
frame.pack();
frame.setSize(1000, 700);
frame.setVisible(true);
}

public static void main(String...args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}

最佳答案

gbc.fill = GridBagConstraints.HORIZONTAL; 使控件填充所有水平区域。

这是在 GridBagLayout 中放置具有固定(以列为单位)长度的文本框的示例

public class MainFrame extends JFrame {

public MainFrame() throws HeadlessException {
super("Test Frame");
createGUI();
}

private void createGUI() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLayout(new GridBagLayout());

JLabel userNameLabel = new JLabel("User Name");
JLabel passwordLabel = new JLabel("Password");

JTextField userNameTextField = new JTextField(20);
JPasswordField passwordField = new JPasswordField(20);

JButton configureButton = new JButton("Configure");

GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(5, 5, 5, 5);
c.gridx = 0;
c.gridy = 0;

c.weightx = 0.0;
add(userNameLabel, c);

c.gridy++;
add(passwordLabel, c);

c.weightx = 1.0;
c.gridx++;
c.gridy = 0;
c.anchor = GridBagConstraints.LINE_START;
add(userNameTextField, c);

c.gridy++;
add(passwordField, c);

c.gridy++;
add(configureButton, c);

pack();
setLocationRelativeTo(null);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new MainFrame().setVisible(true));
}
}

关于java - JTextField 宽度在 GridBagConstraints java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47012631/

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