Java 使JFrame的JPanel大小为?

Java 使JFrame的JPanel大小为?,java,swing,jframe,jpanel,layout-manager,Java,Swing,Jframe,Jpanel,Layout Manager,我已经盯着我的代码看了好几个小时了,我几乎把所有的东西都删减到了最简单的部分,我不知道如何使JPanel扩展到帧的大小。理想情况下(最后),我想要一个包含南北内容面板的容器面板。放置南面板后,北面板需要占用任何剩余空间 不过现在,我有一个小小的红色斑点,大小和它的内容一样大。有人能给我一些关于我到底做错了什么的见解吗 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.borde

我已经盯着我的代码看了好几个小时了,我几乎把所有的东西都删减到了最简单的部分,我不知道如何使JPanel扩展到帧的大小。理想情况下(最后),我想要一个包含南北内容面板的容器面板。放置南面板后,北面板需要占用任何剩余空间

不过现在,我有一个小小的红色斑点,大小和它的内容一样大。有人能给我一些关于我到底做错了什么的见解吗

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

public class TestCode extends JFrame {

    private DescriptionPanel window = new DescriptionPanel();

    public static void main(String[] args){
     TestCode frame = new TestCode();
     frame.pack();
     frame.setTitle("Grape Project");
     frame.setLocationRelativeTo(null);
     frame.setSize(400, 300);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setVisible(true);
    }

    public TestCode(){
        add(window);
    }
}
以及DescriptionPanel类:

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

public class DescriptionPanel extends JPanel{

    private JPanel container = new JPanel();

    public DescriptionPanel(ImageIcon pic, JLabel text){

        container.setBackground(Color.red);
        add(container);
    }
}
这是一个典型的场景


默认情况下,
JPanel
s具有
FlowLayout
,因此您需要调用
setLayout
,或者您可以使用适当的布局管理器初始化
描述面板

super(new BorderLayout()); 
// setLayout(new BorderLayout());

add(top,    BorderLayout.CENTER);  // take all available upper space left
add(bottom, BorderLayout.SOUTH);   // take the vertical space specified

LayoutManager
设置为
BorderLayout

setLayout(new BorderLayout());

非常感谢。setLayout(newOrderLayout());这正是我们所缺少的。我在做各种各样的边界属性,包括BorderLayout.CENTER和SOUTH,但都不起作用。。。直到添加setLayout。非常感谢。
DescriptionPanel
的大小将为0x0,除非添加内容或调用或覆盖
设置(首选/最大/最小)大小()。
DescriptionPanel
做什么?代码模糊地暗示它应该使用
JLabel
执行某些操作。