java - GUI 元素在调整窗口大小之前不显示

标签 java swing

我一直在尝试用 java 制作 GUI,而不是一直使用“静态”,并遇到了“SwingUtilities.invokeLater()”方法。我设法设置了所有内容,但是在运行应用程序时,JPanel 上没有任何内容,直到我调整窗口大小。有解决办法还是我做错了?

这是我的代码:

public class main extends JPanel implements ActionListener{ 
public JLabel userLabel;
public JLabel passLabel;
public JTextField userField;
public JTextField passField;
public JButton login;
public JButton closeLogin;
public JButton help;

public main(){
    userLabel = new JLabel("Username: ");
    passLabel = new JLabel("Password: ");
    userField = new JTextField(16);
    passField = new JTextField(16);

    login = new JButton("Login");
    login.setActionCommand("login");
    login.setMnemonic(KeyEvent.VK_L);
    closeLogin = new JButton("Close");
    closeLogin.setActionCommand("closeLogin");
    closeLogin.setMnemonic(KeyEvent.VK_E);
    help = new JButton("Help");
    help.setActionCommand("helpLogin");
    help.setMnemonic(KeyEvent.VK_H);

    login.addActionListener(this);
    closeLogin.addActionListener(this);
    help.addActionListener(this);

    add(userLabel);
    add(userField);
    add(passLabel);
    add(passField);
    add(login);
    add(help);
    add(closeLogin);

}
public void actionPerformed(ActionEvent e){ 
}
public static void initComponents(){
    JFrame loginFrame = new JFrame("Encrypted Chat - Login");
    loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    main loginPanel = new main();
    loginPanel.setLayout(new FlowLayout());
    loginFrame.setSize(300, 125);
    loginFrame.setResizable(false);
    loginFrame.setVisible(true);        
}
public static void main(String args[]){
    SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            initComponents();
        }
    });
}

编辑:我知道密码 JTextField 是一个 JPasswordField.. 所以忽略它 :P

最佳答案

两条基本建议:

1.) 当你使用 swing 时,东西没有显示/更新,你应该调用 JPanel.revalidate()JPanel.repaint() 这两个函数将更新您的面板。 如果您使用的是 JFrame 并且没有向它添加任何额外的面板,那么您可以通过 JFrame.getContentPane()

获取内容面板

2.) 当您将组件添加到面板/框架后,您还应该在框架上调用 pack(),这将确保您的所有组件都具有首选尺寸。

关于java - GUI 元素在调整窗口大小之前不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12295056/

相关文章:

java - 插入二叉搜索树时节点颜色的动画变化

java - preperedRenderer JTable 遇到问题

java - Android 设备选择器中的序列号/名称

java - 如何在 JComboBox 中添加项目

java - JTable - 如何获取已删除的行

java - 如何将 JRadioButton 添加到 JTable 和 ButtonGroup 的两个列中。

java - 关于 JInternalFrames 的问题

java - 在 iReport 中初始化 HashMap 变量

java - 绘制形状在graphics2D中不起作用

java - 用 Java 构建棋盘