第十一章 GUI编程
GUI的概念
到目前为止,我们编写的都是基于控制台的程序;GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好;
Swing概述
Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同的行为。 Swing中的大部分组件类位于javax.swing包中. ● Swing中的组件非常丰富,支持很多功能强大的组件.
正在上传…重新上传取消
容器组件
Java的图形用户界面的基本组成部分是组件,组件是一个以图形化的方式显示在屏幕上并能与用户进行交互的对象;组件不能独立地显示出来,必须将组件放在一定的容器(container)中才可以显示出来。 容器可以容纳多个组件,通过调用容器的add(Component comp)方法向容器中添加组件。 窗口(Frame)和面板(Panel)是最常用的两个容器。
常用容器
JFrame JFrame用于在Swing程序中创建窗体; JFrame类的构造方法: JFrame() 创建新窗体,该窗体初始为不可见 JFrame(String title) 创建新窗体,使用参数title指定标题,该窗体初始为不可见. JPanel JPanel提供面板,它是轻量级的容器;面板中可以添加其它组件,也可以设置布局,我们一般使用面板来实现布局嵌套; JFrame类的构造方法: JPanel() 创建一个空面板. JPanel(LayoutManaer layout) 创建带有指定布局的面板.
框架(JFrame) 内部包含一个名叫Container(内容面板)的面板容器,如果要给框架中添加图形控件,通常将它们加入到这个内容面板中。 通过JFrame类中的getContentPane()方法即可获得此框架的内容面板。 也可以自己创建Jpanel面板对象,把JPanel作为一个组件添加到某个容器中. 常用方法: 1.void setBackground(Color bg)设置面板的背景色,由参数bg指定颜色 2.void setLayout(LayoutManager mgr)设置面板的布局,参数是布局管理器 3.Component add(Component comp)往面板中添加一个组件
public class Demo1Frame extends JFrame{
public Demo1Frame() throws HeadlessException {
this.setTitle("窗口标题");
this.setSize(500, 500);//大小
//this.setLocation(300, 500);//位置坐标
this.setLocationRelativeTo(null);//相对位置 水平垂直居中
this.setResizable(false);//禁止设置窗口大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项
//在窗口上添加面板
JPanel jp = new JPanel();
jp.setBackground(new Color(252,196,34));
JButton jb = new JButton("登录");
jp.add(jb);
//this--窗口
this.add(jp);
this.setVisible(true);//显示窗口,最后让窗口显示
}
public static void main(String[] args) {
new Demo1Frame(); }}
布局管理器
swing中,提供了布局管理器类的对象可以管理. 每个Jpanel都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用Jpanel的setLayout方法改变其布局管理器对象或通过构造方法设置。
Java中的图形界面在布局管理上采用容器和布局管理相分离的方案,也就是说容器只是把组件放进来,但它不管怎样放置。至于如何放置需要用到布局管理器(Container) 。Java中有几种常用的布局管理器,分别是:FlowLayout , BorderLayout, GridLayout。
正在上传…重新上传取消
1.FlowLayout
FlowLayout布局管理器是流式布局管理器,它将组件按照从左到右、从上到下的顺序来安排,并在默认情况下使组件尽量居中放置。 this.setLayout(new FlowLayout()); this.add(new Button("确定")); this.add(new Button("取消")); FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。 不改变组件的大小,按组件原有尺寸显示组件,可设置不 同的组件间距,行距以及对齐方式。 构造方法: new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距20个像素,垂直间距40个像素。 new FlowLayout(FlowLayout.LEFT);左对齐,水平和垂直间距为缺省值(5)。 new FlowLayout();使用缺省的居中对齐方式,水平和垂直间距为缺省值(5)。
public Demo2Frame() throws HeadlessException {
this.setTitle("窗口标题");
this.setSize(500, 500);//大小
//this.setLocation(300, 500);//位置坐标
this.setLocationRelativeTo(null);//相对位置 水平垂直居中
this.setResizable(false);//禁止设置窗口大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项
/* JPanel默认是流式布局, 组件居中对齐 */
JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT));
//JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT,10,10));
JButton jb1 = new JButton("登录1");
JButton jb2 = new JButton("登录2");
JButton jb3 = new JButton("登录3");
jp.add(jb1);
jp.add(jb2);
jp.add(jb3);
//this--窗口
this.add(jp);
this.setVisible(true);//显示窗口,最后让窗口显示
}
public static void main(String[] args) {
new Demo2Frame(); }}
2.BorderLayout
BorderLayout布局管理器只允许在容器内放置5个组件,这5个组件的位置是由BorderLayout类中的North、South、East、West和Center5个常量来确定的,他们对应着容器中的上下左右中,用法如下: this.add(new Button(“按钮”) ,BorderLayout.NORTH); this.add(new Button(“按钮”) ,BorderLayout.CENTER); 组件在BorderLayout中的大小都是可以改变的。一般情况下可以让中间区域大一些,而且可以只用其中几个区域。
特点: 1.BorderLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中(CENTER)五个区域,组件只能被添加到指定的区域。 2.如不指定组件的加入部位,则默认加入到CENTER区。 3.每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。 4.BorderLayout型布局容器尺寸缩放原则:北、南两个区域在水平方向缩放。东、西两个区域在垂直方向缩放。中部可在两个方向上缩放。
public class Demo3Frame extends JFrame{
public Demo3Frame() throws HeadlessException {
this.setTitle("窗口标题");
this.setSize(500, 500);//大小
//this.setLocation(300, 500);//位置坐标
this.setLocationRelativeTo(null);//相对位置 水平垂直居中
this.setResizable(false);//禁止设置窗口大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项
/* JPanel默认是流式布局, 组件居中对齐 */
JPanel jp = new JPanel(new BorderLayout());
//JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT,10,10));
JButton jb1 = new JButton("登录1");
JButton jb2 = new JButton("登录2");
JButton jb3 = new JButton("登录3");
jp.add(jb1,BorderLayout.NORTH);//指定组件在边界布局中的位置
jp.add(jb2,BorderLayout.WEST);
jp.add(jb3);
//this--窗口
this.add(jp);
this.setVisible(true);//显示窗口,最后让窗口显示
}
public static void main(String[] args) {
new Demo3Frame(); }}
3.GridLayout
GridLayout布局管理器是矩形网格,在网格中放置组件,每个网格的高度和宽度都相等,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的大小和创建网格的多少来确定的。其用法如下: this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格 this.add(new Button(“按钮”)); 当组件数目大于网格数时,GridLayout保持行数不变而自动增加列数。 GridLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等。 组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。 在 GridLayout 构造方法中指定分割的行数和列数.
public class Demo4Frame extends JFrame{
public Demo4Frame() throws HeadlessException {
this.setTitle("窗口标题");
this.setSize(500, 500);//大小
//this.setLocation(300, 500);//位置坐标
this.setLocationRelativeTo(null);//相对位置 水平垂直居中
this.setResizable(false);//禁止设置窗口大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项
/* JPanel默认是流式布局, 组件居中对齐 */
JPanel jp = new JPanel(new GridLayout(2, 2));
//JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT,10,10));
JButton jb1 = new JButton("登录1");
JButton jb2 = new JButton("登录2");
JButton jb3 = new JButton("登录3");
JButton jb4= new JButton("登录4");
jp.add(jb1);
jp.add(jb2);
jp.add(jb3);
jp.add(jb4);
//this--窗口
this.add(jp);
this.setVisible(true);//显示窗口,最后让窗口显示
}
public static void main(String[] args) {
new Demo4Frame(); }}