为什么 getContentPane().getWidth() return 0?

Why does getContentPane().getWidth() return 0?

我有一个扩展 JFrame 的 class Window 和一个扩展 JPanel 的 class ContentContent 的对象添加到 Window 的对象。

Class Window:

public class Window extends JFrame
{   
    private Content content;

    public Window()
    {       
        setTitle("My Window");
        setSize(800, 600);
        setResizable(false);
        setLocationRelativeTo(getParent());
        setDefaultCloseOperation(EXIT_ON_CLOSE);        

        content = new Content(this);

        add(content);

        setVisible(true);
    }

    public static void main(String[] args)
    {
        new Window();
    }
}

Class Content:

public class Content extends JPanel
{
    public Content(Window w)
    {
        window = w;

        System.out.println(window.getContentPane().getWidth());
    }
}

现在我需要知道内容窗格的宽度。但是 window.getContentPane().getWidth() returns 0.

你能告诉我为什么吗?

使用 SetPreferredSize() 然后使用 Pack() 是尝试调用 getWidth() 之前的关键。此代码只是您的代码,稍作修改,可以正常工作。

public class Window extends JFrame
{   
    private Content content;

    public Window()
    {       
        setTitle("My Window");
        setPreferredSize(new Dimension(800, 600));

        setResizable(false);
        setLocationRelativeTo(getParent());
        setDefaultCloseOperation(EXIT_ON_CLOSE);        
        pack();

        content = new Content(this);

        add(content);

        setVisible(true);
    }

    public static void main(String[] args)
    {
        new Window();
    }
}
public class Content extends JPanel
{
    Window window = null;
    public Content(Window w)
    {
        window = w;
        System.out.println(window.getContentPane().getWidth());
    }
}