如果我没有调整大小,为什么窗口太小?

时间:2013-04-24 18:57:46

标签: java swing jframe jlabel jtextfield

我想知道为什么当我在没有调整窗口大小的情况下输入此代码时,我看不到任何内容:

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

public class GolfScoresGUI 
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("GolfScoresGUI");
        JLabel label = new JLabel("Did you score it? ");
        JTextField textField = new JTextField(10);
        frame.setVisible(true);
        frame.getContentPane().add(textField);
    }
}

2 个答案:

答案 0 :(得分:1)

将您的组件添加到您调用setPreferredSize的面板,将面板添加到框架并调用JFrame.pack()。

JFrame.pack()根据其包含的元素的大小更新框架的大小以采用最小可能的大小。

如果你不打电话,它的大小就像是0x0,解释了为什么你什么也看不见。

JFrame frame = new JFrame("GolfScoresGUI");
JPanel panel=new JPanel();
panel.setPreferredSize(new Dimension(600,400)); // Not mandatory. Without this, the frame will take the size of the JLabel + JTextField
frame.add(panel);

JLabel label = new JLabel("Did you score it? ");
JTextField textField = new JTextField(10);
panel.add(label);
panel.add(textField);

frame.setVisible(true);
frame.pack();

修改

顺便说一下,您还应该添加此行,以便在关闭框架时停止应用程序:

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

答案 1 :(得分:0)

一切都很好但你没有为那个JFrame指定任何大小。那就是问题所在。尝试提供frame.setSize(width,height)frame.pack()。通过使用其中一个,您的问题将得到解决。

http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html

详细了解如何使用JFrame。

使用setVisible(true)时要小心。尝试将setVisible(true)放在GUI代码的末尾,即:在将所有GUI组件添加到容器后使用它,因为有时当您添加更多组件时,在调整框架大小之前它将不显示某些组件