【Java SE】布局管理器

提供了FlowLayout、BorderLayout、GriderLayout、GridBagLayout、CardLayout五个常用的布局管理器,Swing还提供了一个BoxLayout布局管理器
  11/**
  2  * @(#)TestLayout.java
  3  *
  4  *
  5  * @author 叶云策(intrl)
  6  * @version 1.00 2009/5/17
  7  */

  8
  9import java.awt.*;
 10import java.awt.event.*;
 11import javax.swing.BoxLayout;
 12import javax.swing.Box;
 13public class TestLayout
 14{
 15    public static void main(String[] args)
 16    {
 17        //FlowLayout布局管理
 18        TestFlowLayout tfl=new TestFlowLayout();
 19        tfl.init();
 20        
 21        //BorderLayout布局管理
 22        new TestBorderLayout().init();
 23        
 24        //GridLayout布局管理
 25        new TestGridLayout().init();
 26        
 27        //GridBagLayout布局管理
 28        new TestGridBagLayout().init();
 29        
 30        //CardLayout布局管理
 31        new TestCardLayout().init();
 32        
 33        //绝对定位
 34        new TestNullLayout().init();
 35        
 36        //BoxLayout布局管理
 37        new TextBoxLayout1().init();
 38        new TextBoxLayout2().init();
 39        new TextBoxLayout3().init();
 40        
 41    }

 42}

 43//FlowLayout布局管理
 44class TestFlowLayout
 45{
 46    private Frame f=new Frame("FlowLayout布局管理");
 47    public void init()
 48    {
 49        f.setLayout(new FlowLayout(FlowLayout.LEFT,20,5));
 50        for(int i=0;i<10;i++)
 51        {
 52            f.add(new Button("按钮"+i));
 53        }

 54        f.pack();
 55        f.setVisible(true);
 56    }

 57}

 58//BorderLayout布局管理
 59class TestBorderLayout
 60{
 61    private Frame f=new Frame("BorderLayout布局管理");
 62    Panel p=new Panel();
 63    public void init()
 64    {
 65        f.setLayout(new BorderLayout(30,5));
 66        f.add(new Button(""),BorderLayout.SOUTH);
 67        f.add(new Button(""),BorderLayout.NORTH);
 68        p.add(new TextField(20));
 69        p.add(new Button("单击我"));
 70        f.add(p);
 71        f.add(new Button(""),BorderLayout.EAST);
 72        f.pack();
 73        f.setVisible(true);
 74    }

 75}

 76//GridLayout布局管理
 77class TestGridLayout
 78{
 79    private Frame f=new Frame("GridLayout布局管理");
 80    Panel p1=new Panel();
 81    Panel p2=new Panel();
 82    public void init()
 83    {
 84        p1.add(new TextField(30));
 85        f.add(p1,BorderLayout.NORTH);
 86        p2.setLayout(new GridLayout(3,5,4,4));
 87        String[] name={"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."};
 88        for(int i=0;i<name.length;i++)
 89        {
 90            p2.add(new Button(name[i]));
 91        }

 92        f.add(p2);
 93        f.pack();
 94        f.setVisible(true);
 95    }

 96}

 97//GridBagLayout布局管理
 98class TestGridBagLayout
 99{
100    private Frame f=new Frame("GridBagLayout布局管理");
101    private GridBagLayout gb=new GridBagLayout();
102    private GridBagConstraints gbc=new GridBagConstraints();
103    private Button[] bs=new Button[10];
104    public void init()
105    {
106        f.setLayout(gb);
107        for(int i=0;i<bs.length;i++)
108        {
109            bs[i]=new Button("按钮"+i);
110        }

111        //所有组件都可以横向、纵向上扩大
112        gbc.fill=GridBagConstraints.BOTH;
113        gbc.weightx=1;
114        addButton(bs[0]);
115        addButton(bs[1]);
116        addButton(bs[2]);
117        //该GridBagConstraints控制的GUI组件将会成为横向最后一个元素
118        gbc.gridwidth=GridBagConstraints.REMAINDER;
119        addButton(bs[3]);
120        //该GridBagConstraints控制的GUI组件将横向上不会扩大
121        gbc.weightx=0;
122        addButton(bs[4]);
123        //该GridBagConstraints控制的GUI组件将横跨两个网络
124        gbc.gridwidth=2;
125        addButton(bs[5]);
126        //该GridBagConstraints控制的GUI组件将横跨一个网络
127        gbc.gridwidth=1;
128        //该GridBagConstraints控制的GUI组件将纵向跨两个网络
129        gbc.gridheight=2;
130        //该GridBagConstraints控制的GUI组件将会成为横向最后一个元素
131        gbc.gridwidth=GridBagConstraints.REMAINDER;
132        addButton(bs[6]);
133        //该GridBagConstraints控制的GUI组件将横向跨一个网络,纵向跨两个网络
134        gbc.gridwidth=1;
135        gbc.gridheight=2;
136        //该GridBagConstraints控制的GUI组件纵向扩大的权重是1
137        gbc.weighty=1;
138        addButton(bs[7]);
139        //设置下面的按钮在纵向上不会扩大
140        gbc.weighty=0;
141        //该GridBagConstraints控制的GUI组件将会成为横向最后一个元素
142        gbc.gridwidth=GridBagConstraints.REMAINDER;
143        //该GridBagConstraints控制的GUI组件将纵向跨一个网络
144        gbc.gridheight=1;
145        addButton(bs[8]);
146        addButton(bs[9]);
147        f.pack();
148        f.setVisible(true);
149    }

150    private void addButton(Button button)
151    {
152        gb.setConstraints(button,gbc);
153        f.add(button);
154    }

155}

156//CardLayout布局管理
157class TestCardLayout
158{
159    private Frame f=new Frame("TestCardLayout布局管理器");
160    private String[] names={"第一张","第二张","第三张","第四张","第五张"};
161    private Panel pl=new Panel();
162    private CardLayout c=new CardLayout();
163    public void init()
164    {
165        pl.setLayout(c);
166        for(int i=0;i<names.length;i++)
167        {
168            pl.add(names[i],new Button(names[i]));
169        }

170        Panel p=new Panel();
171        
172        Button previous=new Button("上一张");
173        previous.addActionListener(new ActionListener(){
174            public void actionPerformed(ActionEvent e)
175            {
176                c.previous(pl);
177            }

178        }
);
179        
180        Button next=new Button("下一张");
181        next.addActionListener(new ActionListener(){
182            public void actionPerformed(ActionEvent e)
183            {
184                c.next(pl);
185            }

186        }
);
187        
188        Button first=new Button("第一张");
189        first.addActionListener(new ActionListener(){
190            public void actionPerformed(ActionEvent e)
191            {
192                c.first(pl);
193            }

194        }
);
195        
196        Button last=new Button("最后一张");
197        last.addActionListener(new ActionListener(){
198            public void actionPerformed(ActionEvent e)
199            {
200                c.last(pl);
201            }

202        }
);
203        
204        Button third=new Button("第三张");
205        third.addActionListener(new ActionListener(){
206            public void actionPerformed(ActionEvent e)
207            {
208                c.show(pl,"第三张");
209            }

210        }
);
211        
212        p.add(previous);
213        p.add(next);
214        p.add(first);
215        p.add(last);
216        p.add(third);
217        f.add(pl);
218        f.add(p,BorderLayout.SOUTH);
219        f.pack();
220        f.setVisible(true);
221    }

222}

223//绝对定位(它不是最好的方法,可能导致该GUI界面失去跨平台特性)
224class TestNullLayout
225{
226    Frame f=new Frame("绝对定位");
227    Button b1=new Button("第一个按钮");
228    Button b2=new Button("第二个按钮");
229    public void init()
230    {
231        f.setLayout(null);
232        b1.setBounds(20,30,90,28);
233        f.add(b1);
234        b2.setBounds(50,45,120,35);
235        f.add(b2);
236        f.setBounds(50,50,200,200);
237        f.setVisible(true);
238    }

239}

240//BoxLayout布局管理
241class TextBoxLayout1
242{
243    private Frame f=new Frame("BoxLayout布局管理1");
244    public void init()
245    {
246        f.setLayout(new BoxLayout(f,BoxLayout.Y_AXIS));
247        //下面按钮将会垂直排列
248        f.add(new Button("第一个按钮"));
249        f.add(new Button("按钮二"));
250        f.pack();
251        f.setVisible(true);
252    }

253}

254//BoxLayout布局管理
255class TextBoxLayout2
256{
257    private Frame f=new Frame("BoxLayout布局管理2");
258    private Box horizontal=Box.createHorizontalBox();
259    private Box vertical=Box.createVerticalBox();
260    public void init()
261    {
262        horizontal.add(new Button("水平按钮一"));
263        horizontal.add(new Button("水平按钮二"));
264        vertical.add(new Button("垂直按钮一"));
265        vertical.add(new Button("垂直按钮二"));
266        f.add(horizontal,BorderLayout.NORTH);
267        f.add(vertical);
268        f.pack();
269        f.setVisible(true);
270    }

271}

272//BoxLayout布局管理
273class TextBoxLayout3
274{
275    private Frame f=new Frame("BoxLayout布局管理3");
276    private Box horizontal=Box.createHorizontalBox();
277    private Box vertical=Box.createVerticalBox();
278    public void init()
279    {
280        horizontal.add(new Button("水平按钮一"));
281        horizontal.add(Box.createHorizontalGlue());
282        horizontal.add(new Button("水平按钮二"));
283        //水平方向不可拉伸的间距,其宽度为10px
284        horizontal.add(Box.createHorizontalStrut(10));
285        horizontal.add(new Button("水平按钮三"));
286        vertical.add(new Button("垂直按钮一"));
287        vertical.add(Box.createVerticalGlue());
288        vertical.add(new Button("垂直按钮二"));
289        //垂直方向不可拉伸的间距,其高度为10px
290        vertical.add(Box.createVerticalStrut(10));
291        vertical.add(new Button("垂直按钮三"));
292        f.add(horizontal,BorderLayout.NORTH);
293        f.add(vertical);
294        f.pack();
295        f.setVisible(true);
296    }

297}
运行结果截图:








 

源代码下载:/Files/intrl/TestLayout.rar

posted on 2009-05-17 00:39 intrl 阅读(876) 评论(0)  编辑 收藏 引用 所属分类: Java

只有注册用户登录后才能发表评论。
<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

随笔分类(55)

随笔档案(34)

网址收藏

资源下载

随笔导航

搜索

最新评论

阅读排行榜

评论排行榜