我正在尝试在 Swing 中制作一个带有“用户”标签、用户名文本字段和“登录”按钮的框。这是我的代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class Engine
{
JFrame frame;
public void go()
{
setUpGui();
userNameScreen();
}
public void setUpGui()
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public void userNameScreen()
{
JPanel background = new JPanel();
frame.getContentPane().add(background);
JLabel labelUserName = new JLabel("User:");
background.add(labelUserName);
System.out.println(labelUserName.getHeight()); // 0
JTextField textFieldUserName = new JTextField();
System.out.println(labelUserName.getHeight()); // 16
textFieldUserName.setPreferredSize(new Dimension(110,labelUserName.getHeight()));
background.add(textFieldUserName);
JButton buttonSignIn = new JButton("Sign In");
background.add(buttonSignIn);
/*
background.add(labelUserName);
background.add(textFieldUserName);
background.add(buttonSignIn);
frame.getContentPane().add(background);
*/
frame.pack();
}
}
我的驱动程序类只是创建了一个引擎实例,然后运行 go() 方法。
我读到 Swing 组件在添加之前没有高度/宽度属性(因为这是由布局管理器决定它们有多少空间),所以在方法 userNameScreen() 中添加所有组件是有道理的最后*(在此处注释掉)使 textFieldUserName 变量没有高度。
但是,您可以在相同的方法 userNameScreen() 中看到,我已经做到了
System.out.println(labelUserName.getHeight());
两次。第一次是0 第二次是16 不明白为什么第一次注册为0 ' 似乎不会在第一个 println() 和下一个之间改变它的高度。那么为什么第一个中的值是 0,为什么之后几乎立即变为 16?
*我应该注意,当我说添加最后注释掉的所有内容时,它还包括删除/注释掉代码中其他地方完成的所有相同命令。