我正在尝试创建一个登录页面。我为两个文本框和一个按钮编写了代码。一个文本框位于用户名旁边,另一个文本框位于密码旁边。下面有一个“登录”按钮。但我不确定为什么文本框和按钮没有显示在我的输出中。我只在输出屏幕上看到用户名和密码标签。
奇怪的是,每当我拉伸(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/