ParentPanel中的ChildPanel自动调整其内容的大小

时间:2014-01-22 12:51:38

标签: java swing resize jpanel

我当前的项目涉及将多个JPanel合二为一。我面临的问题是:ChildPanels的内容会自动调整大小而不需要我。 我使用布局管理器,我更喜欢自己调整一切。

有什么方法可以阻止自动调整大小?

一些例子:

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Test {

public static void main(String[] args) {

    JFrame f = new JFrame("TestFrame");
    f.setVisible(false);
    f.setLayout(null);
    f.setLocation(100, 100);
    f.setSize(350, 350);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    ChildPanel cp1 = new ChildPanel(Color.red, 20, 20);
    ChildPanel cp2 = new ChildPanel(Color.blue, 120, 120);
    ParentPanel pp = new ParentPanel();
    pp.add(cp1);
    pp.add(cp2);
    f.getContentPane().add(pp);
    f.setVisible(true);

}

public static class ChildPanel extends JPanel {

    private Color col;

    public ChildPanel(Color col, int x, int y) {
        super();
        this.col = col;
        setSize(50, 50);
        setLocation(x, y);
    }

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(col);
        g.fillRect(0, 0, 50, 50);
    }

}

public static class ParentPanel extends JPanel {

    public ParentPanel() {
        super();
        setSize(200, 200);
        setLocation(50, 50);
    }

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(Color.black);
        int w = getWidth();
        int h = getHeight();
        g.fillRect(0, 0, w, h);
    }
}


}

1 个答案:

答案 0 :(得分:0)

  

我不使用布局管理器

嗯,实际上你是。没有为父面板设置布局管理器,因此默认情况下使用FlowLayout。为防止这种情况发生,您可以按如下方式更改上面的代码:

public ParentPanel() {
    super(null);
    setSize(200, 200);
    setLocation(50, 50);
}

不建议在没有布局管理器的情况下工作,但如果愿意,则应为每个面板显式设置布局管理器为null。可以通过构造函数调用或setLayout(null);调用来实现。