Java Swing空白屏幕而不是窗口显示

时间:2014-02-27 17:41:58

标签: java swing

我正在阅读一本名为“JFC Swing Tutorial(第二版)”的书,我在开始时已经遵循了这段代码,应该在内容窗格中显示按钮和标签,但我得到的只是一个空白屏幕。有任何想法吗? 感谢。

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

public class m extends JFrame
{
    void UserFrame()
    {
        //JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("Hellow You");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel jp = new JPanel(new GridLayout(0,1));

        //makes label
        JLabel label = new JLabel("Sup ");
        //adds to the frames content pane a label
        frame.getContentPane().add(label);

        JButton button = new JButton("Hai");
        frame.getContentPane().add(button);


        jp.add(button);
        jp.add(label);

        jp.setBorder(BorderFactory.createEmptyBorder(30,30,10,30));

        //pack set the window to what it needs AKA to display all components 
        frame.pack();
        //frame.setSize(250, 250);
        //shows window
        frame.setVisible(true);     
    }



    public static void main(String[] args)
    {
        final m window = new m();
        SwingUtilities.invokeLater(new Runnable() 
        {
            public void run()
            {
                window.UserFrame();
            }
        });
    }

}

1 个答案:

答案 0 :(得分:4)

只需添加

frame.add(jp);

之前

frame.pack();

这里发生了什么?您正确地将所有小部件添加到JPane中,但是您基本上将JPane扔掉了,并且没有在任何地方使用它。

这足以让它正常工作。

如果您想要正确执行此操作,还应删除frame.getContentPane().add(label);frame.getContentPane().add(button);(感谢@dic19注意!)。这些不会像你使用它一样工作。