使JPanel大小为JFrame?

时间:2012-12-02 05:30:37

标签: java swing jframe jpanel layout-manager

我几个小时都在盯着我的代码,而且我几乎把所有内容都删减到了最简单的位,我不知道如何让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);
    }
}

2 个答案:

答案 0 :(得分:6)

这是典型的BorderLayout方案。

默认情况下,JPanel有一个FlowLayout already set,因此您需要致电setLayout,或者您可以使用正确的布局初始化DescriptionPanel经理:

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

答案 1 :(得分:5)

LayoutManager设置为BorderLayout

setLayout(new BorderLayout());