我当前的项目涉及将多个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);
}
}
}
答案 0 :(得分:0)
我不使用布局管理器
嗯,实际上你是。没有为父面板设置布局管理器,因此默认情况下使用FlowLayout。为防止这种情况发生,您可以按如下方式更改上面的代码:
public ParentPanel() {
super(null);
setSize(200, 200);
setLocation(50, 50);
}
不建议在没有布局管理器的情况下工作,但如果愿意,则应为每个面板显式设置布局管理器为null。可以通过构造函数调用或setLayout(null);
调用来实现。