“新用户”时,我会打开一个框架,但文本字段都挤在一起。 我试图将它们全部垂直堆叠,因此我使用 new GridLayout(3, 2) 作为我的 LayoutManager。然而-6ren">
gpt4 book ai didi

java - Swing 布局中的文本框被压扁

转载 作者:行者123 更新时间:2023-12-01 13:05:45 24 4
gpt4 key购买 nike

当您单击"file">“新用户”时,我会打开一个框架,但文本字段都挤在一起。

我试图将它们全部垂直堆叠,因此我使用 new GridLayout(3, 2) 作为我的 LayoutManager。然而,新窗口的内容一直在底部。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class App extends JFrame implements ActionListener
{
private final int WIDTH = 300;
private final int HEIGHT = 550;
private int control = 0;
String[] username = new String[10];
String[] pass = new String[10];
private String tempName;
private String tempPass;

Container con = getContentPane();
JPanel panel = new JPanel();
private JTextField name = new JTextField();
private JPasswordField password = new JPasswordField();

JMenuBar mainBar = new JMenuBar();
JMenu menu1 = new JMenu("File");
JMenu menu2 = new JMenu("Edit");
JMenuItem newUser = new JMenuItem("New User");

JButton but1 = new JButton("Log In");
JButton but2 = new JButton("test");

JLabel error = new JLabel("Login info not corret\n Or user not registered.");
JLabel success = new JLabel("Success!");

/////////////stuff for dialog///////////////////
JPanel panel2 = new JPanel();
JTextField newModalUser = new JTextField();
JPasswordField newModalPass = new JPasswordField();
JPasswordField newModalPassCon = new JPasswordField();
JButton register = new JButton("Register");
////////////////////////////////////////////////
public static void main(String[] args)
{
App frame = new App();
}

public App()
{
//just settin some stuff up
super("For The Bold");
setSize(WIDTH, HEIGHT);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
//setResizable(false);
setVisible(true);

//add menubar
setJMenuBar(mainBar);
mainBar.add(menu1);
menu1.add(newUser);

//background of main JFrame
setContentPane(new JLabel(new ImageIcon("//Users//ryanchampin//Desktop//GUI app//image.png")));

//test names in the arrays
username[0] = "ryan";
pass[0] = "test";

//main stuff in the middle
//panel.setBackground(Color.RED);
panel.setSize(300,300);
panel.add(name);
panel.add(password);
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS ));
panel.add(but1);

panel.add(but2);

add(panel,new GridBagConstraints());
setLayout(new GridBagLayout());

//assign action listener
but1.addActionListener(this);
newUser.addActionListener(this);

register.addActionListener(this);
}


public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
tempName = name.getText();
tempPass = password.getText();

if(source == but1)
{
for(int x = 0; x < username.length; x++)
{
if(tempName.equalsIgnoreCase(username[x]) && tempPass.equals(pass[x]))
{
//display success JLabel
add(success);
System.out.println("success");
break;
}
else
{
success.setText(null);
add(error);
name.setText(null);
password.setText(null);
}
}
}
else
if(source == newUser)
{
panel.setVisible(false);
setLayout(new GridLayout(3,2));
add(panel2);
panel2.add(newModalUser);
panel2.add(newModalPass);
panel2.add(newModalPassCon);
panel2.add(register);
}
else if(source == register)
System.out.println("yay it worked");
}
}

最佳答案

  • 如果可能,请避免使用 setSize(...)setPreferredSize(...)
  • 而是让组件及其布局管理器设置自己的大小。
  • 使用 CardLayout 来交换 View ,而不是您正在做的事情。如果这样做,CardLayout 将调整其容器的大小以适合所提供的所有“卡片”。
  • 添加所有组件后,不要忘记在 GUI 上调用 pack()
  • 不要忘记在添加所有组件以及调用 pack 之后调用 setVisible(true)
  • 创建新的 JTextFields 和 JPasswordFields 时,将一个 int 值作为列数传递到构造函数中。
<小时/>

编辑
你问:

whats pack() used for?

pack() 方法告诉 GUI 让其组成容器的所有布局管理器来布局其组件,然后在每个组件正确放置后设置 GUI 的最佳大小已放置。

关于java - Swing 布局中的文本框被压扁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282816/

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