张 涛 发表于 2012-10-15 14:07
这样怎么看不出来,不设置布局方式不是使用默认的吗?
还有,出来的效果,panel和frame的大小一样,panel.s ...
默认的布局是BorderLayout,如果你使用默认布局,且不指定新加入的控件的位置,默认是加到中间并覆盖整个窗口的大小,所以你看不到frame的颜色,根据后来者居上的原则,越后加入的控件,会覆盖掉前面所有的控件。在大部分布局下,setSize方法都是没有用的(setSzie方法用于设置固定大小,java大部分的布局都是可以让控件自动伸缩,所以使用这个方法无效)。要用setPreferredSize这个方法(设置最适合的大小)。参照我下面的例子吧。- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Frame;
- import java.awt.LayoutManager;
- import java.awt.Panel;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- public class Test extends Frame{
- Panel panel =new Panel();
- public Test(){
- setBounds(300, 300, 300, 300);//设置窗口大小,屏幕位置
- panel.setBackground(Color.RED);//设置panel颜色
- add(panel,BorderLayout.WEST);//把panel的布局从默认的CENTER中,放到其他位置,可以是EAST,WEST,SOUTH,NORTH,CENTER
- //panel.setSize(100,100);//此方法无效
- panel.setPreferredSize(new Dimension(100,100));//设置panel大小
- setBackground(Color.BLUE);//设置Frame颜色
- setVisible(true);//设置窗口可见
- //窗口关闭监听
- addWindowListener(new WindowAdapter(){
- public void windowClosing(WindowEvent e){
- System.exit(0);
- }
- });
- }
- public static void main(String[]args){
- new Test();
- }
- }
复制代码 |