第十一章 GUI编程

GUI的概念

GUI即图形用户界面,它能使程序看上去更友好

Swing概述

Swing是纯java组件,使得程序在不同平台上运行时具有相同的外观和功能

Swing大部分组件位于javax.swing包中

Swing中组件非常丰富,支持很多功能强大的组件

容器组件

java的图形用户界面的基本组成部分是组件,组件是一个以图形化的方式显示在屏幕上并能与用户进行交互的对象

组件必须放在一定的容器中才能显示出来

容器可以有多个组件,通过调用容器的add方法向容器中加入组件

窗口(Frame)和面板(Panel)是最常用的两个容器

常用容器

JFrame用于在Swing程序中创建容器

JPanel提供面板,它是轻量级的容器

面板中可以添加其他组件,也可以设置布局,一般使用面板来实现布局嵌套

通过JFrame类 的getContentPane()方法即可获得此框架的内容面板

也可以自己创建JPanel面板对象,把JPanel当作组件添加到容器中

布局管理器

Swing中,提供了布局管理器类的对象进行管理

每个JPanel都有一个布局管理器对象,当容器需要对某个组件进行定位或判断大小尺寸时,就会调用其对应的布局管理器,调用JPanel的setLayout方法改变其布局管理器对象或通过构造方法设置

java的图形界面在布局管理上采用容器和布局管理相分离的方案,容器只是把组件放进去,不管怎样放置.

想要放置就要用到布局管理器

java中常用的布局管理器有:FlowLayout,BorderLayout,GridLayout

FlowLayout

FlowLayout布局管理器是流式布局管理器,将组件由从左到右、从上到下的顺序排列,默认情况下使组件尽量居中放置

FlowLayout布局管理器对组件逐行定位,从左到右,一行排满后换行

不改变组件大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距和对齐方式

BorderLayout

BorderLayout布局管理器只允许在容器中放置五个组件,这五个组件的位置是由BorderLayout类中的North,South,East,West和Center5个常量来确定的,对应着容器的上下左右中

组件在BorderLayout中的大小都是可变的,一般情况下中间区域较大,可以只使用其中几个区域

不指定组件的位置则默认加入中心区域

每个区域只能有一个组件,如加入多个,后来的组件会覆盖之前的

尺寸缩放规则:

北、南区域在水平方向缩放

东、西区域在垂直方向缩放

中部可在两个方向缩放

GridLayout

GridLayout布局管理器是矩形网格,在网格中放置组件,每个组件的高和宽都相等,组件随着网格的大小在水平和垂直方向上拉伸,网格大小由容器大小和网格数量决定

组件数目大于网格数目时,GridLayout保持行数不变自动增加列数

GridLayout布局管理器将空间划分为规则的矩形网格,每个网格区域大小相等,组件被添加到每个单元格时,先从左到右排列,填满一行后换行,从上到下

在GridLayout的构造方法中指定分割的行数和列数

常用组件

标签(JLabel)

标签是容纳图标和文本的控件

构造函数:

JLabel() 创建一个空的标签

JLabel(String text) 创建一个带文本的标签

JLabel(Icon image) 创建一个带图像的标签

方法:

void setText(String text) 设置标签上的文本.

String getText() 获得标签上的文本

setFont(new Font(“宋体”,Font.BOLD, 18),设置字体

单行文本(JTextField)

JTextField的构造函数: JTextField() 创建一个新的文本 JTextField(String text ) 设置文本内容 JTextField(int columns) 创建一个指定列数的空文本 JTextField(String text, int columns) 创建一个带内容并指定列数的文本 方法: void setText(String text) 设置文本框中的文本 String getText() 获得文本框中的文本 void setEditable(boolean b) 设置文本框是否可以编辑 setColumns(20); 设置列数

多行文本框(JTextArea)

构造函数: JTextArea() 创建一个空的文本域 JTextArea(String text) 用指定文本初始化文本域 JTextArea(int rows, int columns) 创建一个指定行数和列数的空文本域 JTextArea(String text,int rows, int columns) 创建一个带文本,并指行数和列数的 文本域 方法: void setText(String text) 设置文本域中的文本 String getText() 获得文本域中的文本 void setFont(Font font) 设置文本域中文本的字体 void setLineWrap(boolean wrap) //是否自动换行,默认false 如果需要文本区自动出现滚动条,可将文本区对象放入滚动窗格(JScrollPane)中: JScrollPane scrollPane = new JScrollPane(txtArea); add(scrollPane);

密码框(JPasswordField)

构造函数: JPasswordField() 创建一个空白的密码框 JPasswordField(String text) 设置密码框中的文本 JPasswordField(String text, int columns) 创建一个有文本并指定列数的密码框 方法: char[] getPassword()

按钮(JButton)

构造方法: JButton(String text) 创建一个带文本的标签 JButton(Icon image) 创建一个带图像的标签 方法: void setBackground(Color bg) 设置按钮的背景色 void setEnabled(boolean b) 设置启用(或禁用)按钮,由参数b决定 void setToolTipText(String text) 设置按钮的悬停提示信息

事件处理

事件控制对于采用了图形用户界面的程序来说非常重要.目前为止完成的图形用户界面都仅仅完成了界面,没有任何功能,要实现对应的功能必须进行事件处理

用户与GUI按钮进行交互就会触发事件

java中事件处理的思路如下:

一个事件源产生一个事件并把他送到事件监听器那里,监听器收到事件,一旦事件被接受,监听器将处理这些事件

一个事件源必须注册监听器以便监听器可以接受关于一个特定事件的通 知

添加事件监听器(匿名类)

按钮对象.addActionListener(new ActionListener() { // 事件处理 @Override public void actionPerformed(ActionEvent e) { 执行操作

}

});

对话框

JOptionPane对话框 showMessageDialog():消息对话框 主要有五种消息类型,类型不同,图标不同: ERROR_MESSAGE 错误消息提示 INFORMATION_MESSAGE 信息提示 WARNING_MESSAGE 警告提示 QUESTION_MESSAGE 问题提示 PLAIN_MESSAGE 简洁提示 showConfirmDialog():确认对话框 主要有四种消息类型,类型不同,图标不同: DEFAULT_OPTION 默认选项 YES_NO_OPTION 是/否选项 YES_NO_CANCEL_OPTION 是/否/取消选项 OK_CANCEL_OPTION 确定/取消

内部类

什么是内部类

把一个类定义在另一个类的内部,这个类就叫内部类

内部类的分类

成员内部类

静态内部类

局部内部类

匿名内部类

成员内部类

成员内部类就是位于外部类成员位置的类

特点:可以使用外部类的所有成员方法和成员变量(包括private的)

静态内部类

这种被 static 所修饰的内部类,按位置分,属于成员内部类,但也可以称作静态内 部类,也常叫做嵌套内部类.不能使用外部类的非static成员变量和成员方法

局部内部类

局部内部类——就是定义在一个方法或者一个作用域里面的类 特点:主要是作用域发生了变化,只能在自身所在方法和属性中被使用

匿名内部类

一个没有名字的类,是内部类的简化写法

内部类的特点

内部类仍然是一个独立的类,在编译之后内部类会被编译成独立 的.class文件,但是前面冠以外部类的类名和$符号。 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部 类可以自由地访问外部类的成员变量,无论是否为 private 的。 内部类声明成静态的,就不能随便访问外部类的成员变量,仍然是只能 访问外部类的静态成员变量

内部类的意义

  1. 封装性 作为一个类的编写者,我们很显然需要对这个类的使用访问者的访问权限做出一 定的限制,我们需要将一些我们不愿意让别人看到的操作隐藏起来

  1. 实现多继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值