博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java- 几种常见的布局管理
阅读量:5341 次
发布时间:2019-06-15

本文共 6126 字,大约阅读时间需要 20 分钟。

  使用Eclipse做Java的WinForm程序时,并没有拖拉控件的方式。在VS里感受了拖拉控件的好处,看到Java没有,感觉很不习惯。但是Java提供了各种各样的布局管理,使用这些布局管理可以做到更精确的布局吧?我只是想简单的接触下Java,而且这块感觉就像Java所特有的,不太喜欢。所以简单了解一下就可以了!

  AWT(Abstract Windows Toolkit)抽象窗口开发包,用于Java ApplicationGUI编程。本质是希望跨平台。ContainerComponentAWT中两个核心类。

 

  Component又包括一个子类ContainerJava图形用户界面最基本组成部分是ComponentComponent类及其子类的对象用来描述以图形化方式显示在屏幕上并能与用户进行交互的GUI元素。一般的Component对象不能独立的显示出来,必须与某一Container对象中才可以显示出来。

创建Windows窗体的方法一

View Code
public class vvv {    public static void main(String[] args) throws Exception {            Frame f = new Frame("Test");        f.setSize(170,200);        f.setBackground(Color.blue);        f.setVisible(true);        f.addWindowListener(new WindowAdapter(){            @Override            public void windowClosing(WindowEvent e) {                super.windowClosing(e);                System.exit(0);            }        });    }}

创建Windows窗体的方法二

View Code
import java.awt.Color;import java.awt.Frame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class vvv {    public static void main(String[] args) throws Exception {        MyFrame frame = new MyFrame("这是一个窗体", 100, 100, 300, 400, Color.blue);    }}class MyFrame extends Frame {    MyFrame(String name, int x, int y, int width, int height, Color c) {        super(name);        this.setBackground(c);        this.setBounds(x, y, width, height);        this.setVisible(true);        this.addWindowListener(new WindowAdapter(){            @Override            public void windowClosing(WindowEvent e) {                super.windowClosing(e);                System.exit(0);            }        });    }}

 

AWT提供了5种布局管理器类

FlowLayout 、BorderLayout、GridLayout、CardLayout、GridBagLayout

1.FlowLayout是Panel类的默认布局管理器。

FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。可以设不同的间距及对齐方式,默认的对齐方式是局中。

View Code
import java.awt.Button;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.Panel;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class vvv {    public static void main(String[] args) throws Exception {                Frame f = new Frame("FlowLayout Demo");        Button btn1 = new Button("Button1");        Button btn2 = new Button("Button2");        Button btn3 = new Button("Button3");        Button btn4 = new Button("Button4");        Button btn5 = new Button("Button5");        Button btn6 = new Button("Button6");        Button btn7 = new Button("Button7");                Panel panel = new Panel();        panel.setLayout(new FlowLayout(FlowLayout.LEFT,25,25));//设置向左对齐,垂直间距5,水平间距5        panel.add(btn1);        panel.add(btn2);        panel.add(btn3);        panel.add(btn4);        panel.add(btn5);        panel.add(btn6);        panel.add(btn7);                f.setBounds(100, 100, 500, 400);        f.add(panel);        f.setVisible(true);        f.addWindowListener(new WindowAdapter(){            @Override            public void windowClosing(WindowEvent e) {                // TODO Auto-generated method stub                super.windowClosing(e);                System.exit(0);            }        });            }}

2.BorderLayout是Frame类的默认布局管理器,BorderLayout将整个容器的布局划分成

东(EAST)西(WEST)南(SOUTH)北(NORTH)中(CENTER)
如不指定组件的加入部位,则默认加入到CENTER区。
每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。

View Code
import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class vvv {    public static void main(String[] args) throws Exception {                Frame f = new Frame("FlowLayout Demo");        Button btn1 = new Button("Button1");        Button btn2 = new Button("Button2");        Button btn3 = new Button("Button3");        Button btn4 = new Button("Button4");        Button btn5 = new Button("Button5");                f.setLayout(new BorderLayout());        f.add(btn1,BorderLayout.EAST);        f.add(btn2,BorderLayout.WEST);        f.add(btn3,BorderLayout.NORTH);        f.add(btn4,BorderLayout.SOUTH);        f.add(btn5,BorderLayout.CENTER);                f.setBounds(100, 100, 500, 400);        f.setVisible(true);        f.addWindowListener(new WindowAdapter(){            @Override            public void windowClosing(WindowEvent e) {                // TODO Auto-generated method stub                super.windowClosing(e);                System.exit(0);            }        });            }}

3.GridLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右满一行后换行,再从上到下。

在GridLayout构造方法中指定分割的行数和列数
如:GridLayout(3,4);

import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Panel;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class vvv {    public static void main(String[] args) throws Exception {                Frame f = new Frame("GridLayout Demo");        Button btn1 = new Button("Button1");        Button btn2 = new Button("Button2");        Button btn3 = new Button("Button3");        Button btn4 = new Button("Button4");        Button btn5 = new Button("Button5");        Button btn6 = new Button("Button6");        Button btn7 = new Button("Button7");        Button btn8 = new Button("Button8");        Button btn9 = new Button("Button9");        Button btn10 = new Button("Button10");                        f.setLayout(new GridLayout(3,4));        f.add(btn1);        f.add(btn2);        f.add(btn3);        f.add(btn4);        f.add(btn5);        f.add(btn6);        f.add(btn7);        f.add(btn8);        f.add(btn9);        f.add(btn10);                f.setBounds(100, 100, 250, 150);        f.setVisible(true);        f.addWindowListener(new WindowAdapter(){            @Override            public void windowClosing(WindowEvent e) {                // TODO Auto-generated method stub                super.windowClosing(e);                System.exit(0);            }        });            }}

  

  如果在Frame想加入Panel的布局,那么需先将Frame有布局方式清空。

  布局管理器的总结:Frame是一个顶级窗口,Frame的缺省布局管理器为BorderLayout。所以如果直接往Frame里面放一个Panel,他将会把Panel放大居中。如果用户需要亲自设置组件大小或位置,则应取消容器的布局管理器,方法为 setLayout(null);

转载于:https://www.cnblogs.com/cxeye/archive/2012/09/30/2709073.html

你可能感兴趣的文章
Scrapy框架详解
查看>>
跟着彭亮一起学人工智能之深度学习--零基础学人工智能
查看>>
.netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使用
查看>>
.netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础
查看>>
.netCore+Vue 搭建的简捷开发框架--目录
查看>>
cad.net 复制图元的时候按下多次esc导致复制中断的bug,令REGEN,REGENALL更新图元无效....
查看>>
cad.net 图元延迟显示,动画效果,编辑器延迟发送提示.
查看>>
cad.net 定义lisp
查看>>
cad 一个小技巧--复制视口带冻结信息
查看>>
局部加载样式
查看>>
str字符串 center( ) 方法
查看>>
Swift学习笔记(7)--控制流
查看>>
Web Service简介 内部资料 请勿转载 谢谢合作
查看>>
BZOJ2038[2009国家集训队]小Z的袜子(hose)——莫队
查看>>
测试百度地图输入GPS经纬度显示位置API
查看>>
HDFS执行getDatanodeReport输出信息
查看>>
重建道路
查看>>
OC中NSLog函数输出格式罗列
查看>>
牛客练习赛36
查看>>
JS如何监听动画结束
查看>>