第十一章 GUI编程

一.GUI概念

GUI(Graphical User Interface)即图形用户界面,是指采用图形方 式显示的用户界面,与早期计算机使用的命令行界面相比,图形界面对 于用户来说在视觉上更易于接受。

二.Swing概述

● swing 是javax.swing包,该包中包括了图形用户界面的各种组件支持。

● 此包中放的都是用来实现界面的类,所有的类都可以用来实现界面的类。

● swing中的组件可以分为两大类:容器(如窗口,对话框,面板)和功能组件(如按钮,输 入框,菜单等).

三.容器组件

1.概述

功能组件不能独立地显示出来,必须将组件放在一定的容器(container)中才可以显示出来。

容器可以容纳多个组件,通过调用容器的add(Component comp)方法向容器中添加组件。

窗口(JFrame)和面板(JPanel)是最常用的两个容器。

JFrame类用来创建窗体; 我们的类可以直接继承该类,实现窗体制作.

2.设置窗体的常用方法

void setSize(int width, int height):设置窗口大小

void setVisible(boolean b):让窗口显示出来,放在设置的最后一行

void setTitle(String title):设置标题

void setResizable(boolean resizable):设置窗口不能调整大小(false)

void setLocation(int x,int y):根据x,y设置窗口大小(排版容易变形)

void setLocationRelativeTo(null):设置窗口位置水平垂直居中

void setDefaultCloseOperation(int operation):关闭窗口选项【EXIT_ON_CLOSE——>关闭窗口时,程序退出运行】

void dispose():释放当前窗口

3.创建面板

创建面板:JPanel jPanel=new JPanel();

把面板添加到窗口上:this.add(jPanel);

四.布局管理器

● swing中,提供了布局管理器类的对象可以管理

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

Java中有几种常用的布局管理器,分 别是:FlowLayout , BorderLayout, GridLayout。

1.FlowLayout 流式布局

FlowLayout布局管理器是流式布局管理器,它将组件按照从左到右、从上到下的顺序来安排, 并在默认情况下使组件尽量居中放置。

this.setLayout(new FlowLayout()); FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。 不改变组件的大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。

构造方法

new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距20个像素,垂直间距40 个像素。

new FlowLayout(FlowLayout.LEFT);左对齐,水平和垂直间距为缺省值(5)。

new FlowLayout();使用缺省的居中对齐方式,水平和垂直间距为缺省值(5)

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)每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。

3.、GridLayout  网格布局

(1)GridLayout布局管理器是矩形网格,在网格中放置组件,每个网格的高度和宽度都相等,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的 大小和创建网格的多少来确定的。其用法如下:

this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格

this.add(new Button(“按钮”));

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

五.常用组件

1.标签(JLabel)

标签是容纳文本和图标的控件,通常用来在界面中标识别的控件。

构造函数:

JLabel();//创建一个空的标签

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

方法:

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

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

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

2.单行文本(JTextField)

JTextField的构造函数: JTextField(int columns)

方法:

void setText(String text)  设置文本框中的文本

String getText() 获得文本框中的文本

3.多行文本框(JTextArea)

构造函数:

JTextArea(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 );

4.密码框(JPasswordField)

构造函数:

JPasswordField(String text)

JPasswordField(String text, int columns)

方法:

char[] getPassword()

【代码图在   2.单行文本(JTextField)  】

5.按钮(JButton)

构造方法: JButton(String text)

方法:

void setBackground(Color bg) 设置按钮的背景色

void setEnabled(boolean b) 创建一个带文本的标签 设置启用(或禁用)按钮,由参数定

void setToolTipText(String text) 设置按钮的悬停提示信息

6.菜单

(1)菜单栏组件:

构造方法:JMenuBar();

方法:add(menu); 向菜单栏添加菜单

(2)菜单组件:

构造方法:JMenu(“菜单名称");

方法:add(menuItem); 向菜单添加菜单选项

(3)菜单项组件:

构造方法:JMenuItem(“菜单项名称");

(4)将菜单栏添加到窗口

setJMenuBar(menuBar)

六.事件处理

添加事件监听器(此处即为匿名类) 

按钮对象.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             确定/取消

八.内部类

1.什么是内部类

● 把类定义在另一个类的内部,该类就被称为内部类。

● 如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类 (或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。

2.内部类定义

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

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

内部类的特点:

● 内部类仍然是一个独立的类,在编译之后内部类会被编译成独立 的.class文件,但是前面冠以外部类的类名和$符号。

● 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部 类可以自由地访问外部类的成员变量,无论是否为 private 的。

3.匿名内部类

匿名内部类是内部类的更简化,为了实现一些功能而创建的内部类可能只用一次,就可以简化为匿名内部类。

(图七.1选取)

4.内部类的意义

(1)封装性

将只有在某个类中使用的功能定义在内部中,并可以使用不同访问权限修饰控制.

(2)实现多继承

java是不支持多继承的,多继承有一个致命性的缺陷, 容易出现钻石继承结构,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值