当前位置 : IT培训网 > Java开发 > Java教程 > Java编程开发图形界面之布局设计

Java编程开发图形界面之布局设计

时间:2016-09-01 17:17:54  来源:Java培训网  作者:IT培训网  已有:名学员访问该课程
FlowLayout布局是将其中的组件按照加入的先后顺序从左到右排列,一行满之后就转到一下行继续从左到右排列,每一行中的组件都居中排列。这是一种最简便的布局策略,一般用于组件不多的情况,当组件较多时,容器中的组件就会

Java编程开发也需要布局设计吗,是的,Java既然有图形界面设计,也少不了布局,唯有将容器内的各个组件布局好,才能体现美观,下面就让IT培训网小编来给大家详细介绍下如何Java编程开发图形界面的布局设计知识点吧。

在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计。java.awt中定义了多种布局类,每种布局类对应一种布局的策略。常用的有以下布局类:

FlowLayout,依次放置组件。

BoarderLayout,将组件放置在边界上。

CardLayout,将组件像扑克牌一样叠放,而每次只能显示其中一个组件。

GridLayout,将显示区域按行、列划分成一个个相等的格子,组件依次放入这些格子中。

GridBagLayout,将显示区域划分成许多矩形小单元,每个组件可占用一个或多个小单元。

其中GridBagLayout能进行精细的位置控制,也最复杂,本教程暂不讨论这种布局策略,将在专题文章中进行详细讲解。

每个容器都有一个布局管理器,由它来决定如何安排放入容器内的的组件。布局管理器是实现LayoutManager接口的类。

一.FlowLayout布局 (JApplet,JPanel,JScrollPane默认布局)

FlowLayout布局是将其中的组件按照加入的先后顺序从左到右排列,一行满之后就转到一下行继续从左到右排列,每一行中的组件都居中排列。这是一种最简便的布局策略,一般用于组件不多的情况,当组件较多时,容器中的组件就会显得高低不平,各行长短不一。

FlowLayout是小应用程序和面板默认布局,FlowLayout布局的构造方法有:

FlowLayout(),生成一个默认的FlowLayout布局。默认情况下,组件居中,间隙为5个像素。

FlowLayout(int aligment),设定每珩的组件的对齐方式。alignment取值可以为 FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT。

FlowLayout(int aligment,int horz, int vert),设定对齐方式,并设定组件的水平间距horz和垂直间距vert,用超类Container的方法setLayout()为容器设定布局。例如,代码setLayout(new FlowLayout())为容器设定 FlowLayout布局。将组件加入容器的方法是add(组件名)。

二.BorderLayout布局(JWindow、JFrame,JDialog的默认布局)

BorderLayout布局策略是把容器内的空间简单划分为东“East”,西 “West”,南 “South”,北 “North”,中 “Center”五个区域。加入组件时,都应该指明把组件放在哪一个区域中。一个位置放一个组件。如果某个位置要加入多个组件,应先将要加入该位置的组件放放另一个容器中,然后再将这个容器加入到这个个位置。

BorderLayout布局的构造方法有:

(1) BorderLayout(),生成一个默认的BorderLayout布局。默认情况下,没有间隙。

(2) BorderLayout(int horz,int vert),设定组件之间的水平间距和垂直间距。

BorderLayout布局策略的设定方法是setLayout(new BorderLayout())。将组件加入到容器的方法是add(组件名,位置),如果加入组件时没有指定位置,则默认为“中”位置。

BorderLayout布局是JWindow、JFrame,JDialog的默认布局。

【例 11-5】应用程序设有五个标签、分别放于窗口的东、西、南、北和中五个区域。

import javax.swing.*;import java.awt.*;

public class J505{

    public static void main(String[]args){

        JLabel label1,label2,label3,label4,label5;

        JFrame mw=new JFrame("我是一个窗口");//创建一个窗口容器对象

        mw.setSize(250,200);

        Container con=mw.getContentPane();

        con.setLayout(new BorderLayout());

        label1=new JLabel("东标签");//默认左对齐

        label2=new JLabel("南标签",JLabel.CENTER);

        label3=new JLabel("西标签");

        label4=new JLabel("北标签",JLabel.CENTER);

        label5=new JLabel("中标签",JLabel.CENTER);

        con.add(label1,"East");

        con.add(label2,"South");

        con.add(label3,"West");

        con.add(label4,"North");

        con.add(label5,"Center");

        mw.setVisible(true);

    }

}

三.GridLayout布局

GridLayout布局是把容器划分成若干行和列的网格状,行数和列数由程序控制,组件放在网格的小格子中。GridLayout布局的特点是组件定位比较精确。由于GridLayout布局中每个网格具有相同形状和大小,要求放入容器的组件也应保持相同的大小。

GridLayout布局的构造方法有:

(1) GridLayout(),生成一个单列的GridLayout布局。默认情况下,无间隙。

(2) GridLayout(int row,int col),设定一个有行row和列col的GridLayout布局。

(3) GridLayout(int row,int col,int horz,int vert),设定布局的行数和列数、组件的水平间距和垂直间距。

GridLayout布局以行为基准,当放置的组件个数超额时,自动增加列;反之,组件太少也会自动减少列,行数不变,组件按行优先顺序排列(根据组件自动增减列)。GridLayout布局的每个网格必须填入组件,如果希望某个网格为空白,可以用一个空白标签(add(new Label()))顶替。

【例 11-6】小应用程序先将若干个按钮和若干个标签放入JPanel中,然后将JPanel放入JScrollPane中,最后,将JScrollPane放入小程序的窗口中,程序所创建的JScrollPane总是带水平和垂直滚动条,滚动面板的可视范围小于面板的实际要求,可以移动滚动条的滑块显示面板原先不在可视范围内的区域。

import java.applet.*;

import javax.swing.*;

import java.awt.*;

class MyWindow extends JFrame{

    public MyWindow(int w,int h){

        setTitle("滚动面板实例");

        Container con=getContentPane();

        con.setPreferredSize(new Dimension(w,h));

        con.setLayout(new BorderLayout());

        JPanel p=new JPanel();

        p.setLayout(new GridLayout(6,6));

        for (int i=0;i<6;i++){

            p.add(new JLabel());

            for(int j=1;j<=2;j++){

                p.add(new JButton("按钮"+(2*i+j)));

                p.add(new JLabel("标签"+(2*i+j)));

            }

            p.add(new JLabel());

        }

        p.setBackground(Color.blue);

        p.setPreferredSize(new Dimension(w+60,h+60));

        JScrollPane ScrollPane=new JScrollPane(p);

        ScrollPane.setPreferredSize(new Dimension(w-60,h-60));

        add(ScrollPane,BorderLayout.CENTER);//小程序添加滚动面板

        setVisible(true); pack();

    }

}

class ScrollPane extends JScrollPane{

    public ScrollPane(Component p){

        super(p);

        setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    }

}

public class J506 extends Applet{

    MyWindow myWindow;

    public void init(){

        myWindow=new MyWindow(400,350);

    }

}

GridLayout布局要求所有组件的大小保持一致,这可能会使用界面外观不够美观。一个补救的办法是让一些小组件合并放在一个容器中,然后把这个容器作为组件,再放入到GridLayout布局中。这就是前面所说的容器嵌套。例如,容器A使用GridLayout布局,将容器均分为网格;另有容器B和C各放入若干组件后,把B和C分别作为组件添加到容器A中。容器B和C也可以设置为GridLayout布局,把自己分为若干网格,也可以设置成其他布局。这样,从外观来看,各组件的大小就有了差异。

四.CardLayout布局

采用CardLayout布局的容器虽可容纳多个组件,但是多个组件拥有同一个显示空间,某一时刻只能显示一个组件。就像一叠扑克牌每次只能显示最上面的一张一样,这个显示的组件将占据容器的全部空间。CardLayout布局设计步骤如下:

先创建CardLayout布局对象。然后,使用setLayout()方法为容器设置布局。最的,调用容器的add()方法将组件加入容器。CardLayout布局策略加入组件的方法是:

add(组件代号,组件);

其中组件代号是字符串,是另给的,与组件名无关。

 

例如,以下代码为一个JPanel容器设定CardLayout布局:

CardLayout myCard = new CardLayout();//创建CardLayout布局对象

JPanel p = new JPanel();//创建Panel对象

p.setLayout(myCard);

 

用CardLayout类提供的方法显示某一组件的方式有两种:

(1) 使用show(容器名,组件代号)形式的代码,指定某个容器中的某个组件显示。例如,以下代码指定容器p的组件代号k,显示这个组件:

myCard.show(p,k);

(2) 按组件加入容器的顺序显示组件。

first(容器):例如,代码myCard.first(p);

last(容器):例如 , myCard.last(p);

next(容器):例如,myCard.next(p);

previous(容器):myCard.previous(p);

【例11-7】小应用程序使用CardLayout布局,面板容器p使用CardLayout布局策略设置10个标签组件。窗口设有4个按钮,分别负责显示p的第一个组件、最后一个组件、当前组件的前一个组件和当前的组件的最后一个组件。

import java.applet.*;import java.awt.*;

import java.awt.event.*;import javax.swing.*;

class MyPanel extends JPanel{

    int x;JLabel label1;

    MyPanel(int a){

        x=a;getSize();

        label1=new JLabel("我是第"+x+"个标签");add(label1);

    }

    public Dimension getPreferredSize(){

        return new Dimension(200,50);

    }

}

public class J507 extends Applet implements ActionListener{

    CardLayout mycard;MyPanel myPanel[];JPanel p;

    private void addButton(JPanel pan,String butName,ActionListener listener){

        JButton aButton=new JButton(butName);

        aButton.addActionListener(listener);

        pan.add(aButton);

    }

    public void init(){

        setLayout(new BorderLayout());//小程序的布局是边界布局

        mycard=new CardLayout();

        this.setSize(400,150);

        p=new JPanel();p.setLayout(mycard);//p的布局设置为卡片式布局

        myPanel=new MyPanel[10];

        for(int i=0;i<10;i++){

            myPanel[i]=new MyPanel(i+1);

            p.add("A"+i,myPanel[i]);

        }

        JPanel p2=new JPanel();

        addButton(p2,"第一个",this);

        addButton(p2,"最后一个",this);

        addButton(p2,"前一个",this);

        addButton(p2,"后一个",this);

        add(p,"Center"); add(p2,"South");

    }

    public void actionPerformed(ActionEvent e){

        if (e.getActionCommand().equals("第一个"))mycard.first(p);

        else if(e.getActionCommand().equals("最后一个"))mycard.last(p);

        else if(e.getActionCommand().equals("前一个"))mycard.previous(p);

        else if(e.getActionCommand().equals("后一个"))mycard.next(p);

    }

}

五.null布局与setBounds方法

空布局就是把一个容器的布局设置为null布局。空布局采用setBounds()方法设置组件本身的大小和在容器中的位置:

setBounds(int x,int y,int width,int height)

组件所占区域是一个矩形,参数x,y是组件的左上角在容器中的位置坐标;参数weight,height是组件的宽和高。空布局安置组件的办法分两个步骤:先使用add()方法身容器添加组件。然后调用setBounds()方法设置组件在容器中的位置和组件本身的大小。与组件相关的其他方法:

getSize().width,

getSize().height

setVgap(ing vgap)

setHgap(int hgap);

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
------分隔线----------------------------
Java教程
1、Java 概述
1.1 Java语言概述
1.2 Java虚拟机以及跨平台原理
1.3 Java的主要就业方向
1.4 Java的不同版本
1.5 Java开发环境搭建
1.6 第一个Java程序示例
1.7 Java类和对象的概念
1.8 Java类库及其组织结构
1.9 Java import
2、Java 语法基础
2.1 Java数据类型以及变量的定义
2.2 Java数据类型转换
2.3 Java运算符
2.4 Java流程控制
2.5 Java数组的定义和使用
2.6 Java字符串(String)
2.7 Java StringBuffer与StringBuider
2.8 强调一下编程风格
3、Java 类与对象
3.1 Java类的定义及其实例化
3.2 Java访问修饰符
3.3 Java变量的作用域
3.4 Java this关键字详解
3.5 Java方法重载
3.6 Java类的基本运行顺序
3.7 Java包装类、拆箱和装箱详解
3.8 再谈Java包
3.9 源文件的声明规则
4、Java 继承和多态
4.1 继承的概念与实现
4.2 Java super关键字
4.3 继承中的方法的覆盖和重载
4.4 多态和动态绑定
4.5 instanceof 运算符
4.6 多态对象的类型转换
4.7 Java static关键字
4.8 Java final关键字
4.9 Java Object类
5、面向对象高级特性
5.1 Java内部类及其实例化
5.2 内部类的分类
5.3 抽象类的概念和使用
5.4 接口的概念和使用
5.5 接口和抽象类的区别
5.6 Java 泛型
5.7 泛型通配符和类型参数的范围
6、异常处理
6.1 异常处理基础
6.2 异常类型Java语言中常见的异常类型有哪些
6.3 未被捕获的异常
6.4 try和catch的使用
6.5 多重catch语句的使用
6.6 try语句的嵌套
6.7 throw:异常的抛出
6.8 throws子句
6.9 finally块
6.10 Java的内置异常
6.11 创建自己的异常子类
6.12 断言
7、线程编程
7.1 线程的概念
7.2 Java线程模型
7.3 主线程
7.4 创建线程
7.5 创建多线程
7.6 isAlive()和join()的使用
7.7 线程优先级
7.8 线程同步
7.9 线程间通信
7.10 线程死锁
7.11 线程的挂起、恢复和终止
8、输入输出(IO)操作
8.1 输入输出基本概念
8.2 面向字符的输入流
8.3 面向字符的输出流
8.4 面向字节的输入输出流
8.5 面向字节流的应用
8.6 文件与目录管理
8.7 文件的随机读写
8.8 文件的压缩处理
9、常用类库、向量与哈希
9.1 Java基础类库
9.2 Object类
9.3 Java语言包(java.lang)简介
9.4 日期和时间类
9.5 向量及其应用
9.6 哈希表及其应用
10、图形界面(GUI)设计
10.1 图形界面设计基础
10.2 框架窗口
10.3 标签、按钮和按钮事件
10.4 面板
10.5 布局设计
10.6 文本框和文本区
10.7 文本框和文本区的输入输出
10.8 选择框和单选按钮
10.9 列表和组合框
10.10 菜单
10.11 对话框
10.12 滚动条
10.13 鼠标事件
10.14 键盘事件
11、图形、图像与多媒体
11.1 绘图基础
11.2 设置字型和颜色
11.3 绘图模式
11.4 Graphics类的绘图方法
11.5 Graphics2D类的绘图方法
11.6 图像处理基础
11.7 图像缓冲技术
11.8 多媒体基础
12、网络与数据库编程
12.1 IP地址和InetAddress类
12.2 统一资源定位符
12.3 套接字(Socket)
12.4 数据库连接
12.5 几个重要的类和接口
12.6 数据库查询
12.7 数据库更新
12.8 插入记录
12.9 修改记录
12.10 删除记录