java - 在手动拉伸(stretch)框架之前,文本框不会显示在框架上

标签 java swing jframe awt

我正在尝试创建一个登录页面。我为两个文本框和一个按钮编写了代码。一个文本框位于用户名旁边,另一个文本框位于密码旁边。下面有一个“登录”按钮。但我不确定为什么文本框和按钮没有显示在我的输出中。我只在输出屏幕上看到用户名和密码标签。

奇怪的是,每当我拉伸(stretch)输出帧(我的意思是水平或垂直拉动屏幕)时,两个文本框和按钮就会出现。

请检查我的代码并让我知道出了什么问题。我试图放图片以便更容易理解,但我没有足够的声誉。请帮忙。

import javax.swing.*;
import java.awt.*;

public class HomeScreen{

public static void main(String args[]){

JFrame frame = new JFrame("Medical Store");
frame.setVisible(true);
frame.setSize(600,400);
JPanel panel = new JPanel(new GridBagLayout());
frame.getContentPane().add(panel, BorderLayout.NORTH);

GridBagConstraints c = new GridBagConstraints();

JLabel label1 = new JLabel("Username");
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(10,10,10,10);
panel.add(label1,c);

JLabel label2 = new JLabel("Password");
c.gridx = 0;
c.gridy = 1;    
panel.add(label2,c);

JTextField textbox1 = new JTextField(10);
c.gridx = 1;
c.gridy = 1;
panel.add(textbox1,c);

JTextField textbox2 = new JTextField(10);
c.gridx = 2;
c.gridy = 1;
panel.add(textbox2,c);

JButton button1 = new JButton("Sign In");
c.gridx = 1;
c.gridy = 2;
panel.add(button1,c);

}   
}

最佳答案

您在添加所有组件之前调用setVisible(true),因此您的 GUI 正在执行此操作,在组件之前绘制自身已添加。

JFrame frame = new JFrame("Medical Store");
frame.setVisible(true);

// all components added here

解决方案:在添加所有组件之后结束时调用setVisible(true)

JFrame frame = new JFrame("Medical Store");

// all components added here

frame.setVisible(true);

现在所有组件都应该可视化。

其他问题:

  • 避免对任何东西调用setSize(...)。相反,让布局管理器和组件首选尺寸为您做这件事。
  • 在将 JFrame 设置为可见之前调用 pack(),以便发生上述情况。

关于java - 在手动拉伸(stretch)框架之前,文本框不会显示在框架上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27217697/

相关文章:

java - 无法使用 ant 运行类别中的所有 junit 测试

java - 不使用Spring等时如何将Swing GUI与业务逻辑分离

Java swing setMaximumSize 不工作

java - 是否可以通过 RMI 或其他网络技术远程调用 Swing Listener 的方法?

java - 我在 Swing Worker 中遇到编译错误?

java - 使用 Swing 绘制文本

java - 我无法获取下面的程序,请解释一下

java - Java程序必须要有Main方法吗?

java - 如何获取用php发布的小程序数据?

java - Java与C#到DateTime的长转换