日期:2014-05-20  浏览次数:20615 次

求助JPanel显示大小问题?
定义了两个JPanel           p1,p2,然后设置p1的布局管理器为BorderLayout
然后设置p2的布局管理器为GridBagLayout       ,然后在p2上面加了一些组件
最后把p2加到p1上面去,即   p1.add(p2,BorderLayout.CENTER);
但是p2完全填充了p1的CENTER区域,我该怎么设置才能使p2按照我设置的大小显示
还有就是怎么才能在p1中精确定位p2的显示位置?
谢谢您的回答。。。

------解决方案--------------------
我所知道二个办法:一,把p1的布局设置成NULL,p1.setLayout(null);(好象是这样,不知道写错了没).然后你就可以把其它组件按你的大小放进去,不过这样就要先也一定要指定大小和位置,
二,把布局设成FlowLayout,这样也会按你的大小或默认大小进去的。这样你也许就要多用点面板了才能定位好了。
还有精确定位是不好的,一但你拉动窗口的大小你会发现组件排列超级变形了,不好看了(除非你设置成面板大小固定)
------解决方案--------------------
getContentPane().setLayout(null);然后在上面放别的东西
------解决方案--------------------
import java.awt.*;
import javax.swing.*;

public class Test extends JFrame
{
JPanel p1;
JButton btnP1 = new JButton();
JPanel p2 = new JPanel();
JButton btnP2 = new JButton();
JTextArea txaInfo = new JTextArea();
public Test()
{
try
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
}
catch (Exception exception)
{
exception.printStackTrace();
}
}

private void init() throws Exception
{
p1 = (JPanel) getContentPane();
p1.setLayout(null);
setSize(new Dimension(400, 300));
setTitle( "Frame Title ");
btnP1.setBounds(new Rectangle(42, 25, 142, 36));
btnP1.setFont(new java.awt.Font( "Dialog ", Font.BOLD, 16));
btnP1.setText( "我在p1上 ");
p2.setBorder(BorderFactory.createEtchedBorder());//特别在p2上设置个边框
p2.setBounds(new Rectangle(92, 81, 223, 101));
p2.setLayout(null);
btnP2.setBounds(new Rectangle(49, 23, 132, 44));
btnP2.setFont(new java.awt.Font( "Dialog ", Font.BOLD, 16));
btnP2.setText( "我在p2上 ");
txaInfo.setFont(new java.awt.Font( "Dialog ", Font.PLAIN, 16));
txaInfo.setText( "我也在p1上,p2加在p1上,加了边框的就是p2 ");
txaInfo.setBounds(new Rectangle(46, 204, 309, 54));
p1.add(btnP1);
p1.add(p2);
p1.add(txaInfo);
p2.add(btnP2);
this.setLocationRelativeTo(this);//窗口居中显示
this.setVisible(true);
}
public static void main(String[] args)
{
new Test();
}
}
------解决方案--------------------
p1布局不用改
建议加个p3 放进p1布局的center位置 再把p2和你要放的其他东西放在p3里 p3的布局看你需要了
再建议你说的p2以外的其他东西也放在一个Panel里