------- http://www.itheima.com" target="blank">android培训http://www.itheima.com"target="blank">java培训、期待与您交流!
一、GUI概述及体系图
1.GUI:Graphical User Interface(图形用户接口)。
1) GUI全称Graphical User Interfaces,意为图形用户户界面,又称为图形用户接口,GUI指的就是采用图形方式显示的计算机操作用户界面
2)实现GUI编程的必不可少的三个条件是组件、事件
a. 组件
组件就是一些基本的图形元素,包含有两类组件,一类是像我们经常用到的按钮、文本框、文本域、多选按钮、单选按钮等;另一类是我们经常说到的容器,比如说窗体、Panel等,它的作用主要是用来组织界面上的组件或者单元。
b. AWT组件
AWT组件是重量级组件,它依赖于本地操作系统的GUI,缺乏平台独立性。但是AWT组件简单稳定,兼容于任何一个JDK版本。AWT所涉及到的类一般在java.awt的包及其子包中。java.awt中的类负责与本地操作系统进行交互,让本地操作系统显示和操作组件。
AWT中的两个核心类是Container(容器)和Component类
Component类
Java图形用户界面最基本组成部分是Component,Component类及其子类的对象用来描述以图形化的方式显示在屏幕上并能够与用户进行交互的GUI元素(标签、按钮)。
Container类
用来组织界面上的组件或者单元。有两种常用的Container(容器),一是Window,Window对象表示自由停泊的顶级窗口,另一个是Panel对象可作为容纳其他Component对象,但不能够独立存在,必须被添加到其他Container中,比如说Window或者Applet中。
Container它有一定的范围和大小,一般都是矩形。也有一定的位置,这个位置可分相对位置和绝对位置。
一个Container中可以包含其他Container,Container中可以嵌套Container,当Container显示时候,它里面的元素也被小时出来,当Container隐藏时或者关闭时,它包含的元素也被隐藏。
Component类与Container类关系
Component对象不能独立显示出来,必须放在某一Container对象中才可以显示出来。
Container是Component的子类,Container子类对象可以容纳别的Component对象。Container对象也可以被当作Component对象添加到其他Container对象中。
事件
事件是指组件触发的动作事件,java中不同的事件由不同的监听器处理,组件是事件源对象,而监听器主要用来接收来自事件源对象产生的动作事件,然后对其处理。
2.CLI:Command line User Interface (命令行用户接口)
3. awt包:
1).Abstract Window ToolKit (抽象窗口工具包)
2).是最早出现的,桌面应用程序开发工具包;
3).调用本地方法(底层操作系统的类库)实现功能;不是跨平台的,属于重量级的工具包;运行速度快;
4. swing包:
1).在AWT包的基础上建立的图形用户界面工具包;
2).是后期出现的;
3).不调用本地方法;它是跨平台的,属于轻量级的工具包;纯Java编写的;运行速度要稍微慢一些;
5.GUI体系图
二、HelloWorld窗体制作
<span style="font-family:Microsoft YaHei;font-size:14px;">package com.itys;
import java.awt.Dimension;
import java.awt.Frame;
//import java.awt.Point;
/*
* 第一个HelloWorld窗体:
* 1.要显示一个窗体,需要使用java.awt.Frame类;
* 2.显示窗体的步骤:
* 1)实例化一个Frame对象;(不可见的)
* 2)设置窗体:
*
*/
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
* 第一个HelloWorld窗体:
* 1,要显示一个窗体,需要使用java.awt.Frame类;
* 2.显示窗体的步骤:
* 1)实例化一个Frame对象;(不可见的)
* 2)设置窗体:
* a.设置大小:setSize(int width,int height) 或者:setSize(Dimension d)
* b.设置位置:setLocation(int x, int y) 或者:setLocation(Point p)
* c.一次性设置大小、位置:public void setBounds(int x,int y, int width, int heigh)
* d.设置窗体标题:方式一,构造Frame时,可以通过构造方法指定;
* 方式二, 可以在构造之后,调用Frame---->setTile()方法设置。
* e.让窗体可见:Frame--->setVisible()方法
* 3.添加事件监听:
* 1)事件源:Frame 2)可能会发生什么事,点击关闭按钮; 3)如果发生这样的事,该怎么办:自定义类,实现WIndowListener接口
* 重写windowClosing()方法 4)关联
*/
public class Demo_HelloWorld窗体 {
public static void main(String[] args) {
// 创建隐形窗体
Frame f = new Frame("HY");
// 设置大小
// f.setSize(400,500);
f.setSize(new Dimension(500, 500));
// 设置位置
f.setLocation(400, 150);
// f.setLocation(new Point(400,150));
// 一次性设置窗体位置和大小
// f.setBounds(400, 150, 400, 500);
// 设置窗体标题(一种是此种,另外一种在Frame构造方法设置)
// f.setTitle("HY");
//为窗体添加监听事件(第一种)
// f.addWindowListener(new MyListener());
//匿名内部类方式(第二种)
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setVisible(true);
}
}
</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">package com.itys;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class MyListener implements WindowListener {
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("关闭窗口!");
//调用JVM关闭窗口
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
}
</span>
三、为窗体添加按钮,并使用多线程启动
<span style="font-family:Microsoft YaHei;font-size:14px;">package com.ityssd;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
/*
* 为窗体添加按钮:
* 1.需要一个窗体:Frame
* 2.需要一个按钮:Button;并添加事件:按钮事件,只需要一个事件ActionListrner(接口),它里面就是一个方法,实现即可
* 3.将按钮添加到窗体;
* 4.显示窗体;
*/
public class Test {
public static void main(String[] args) {
// 创建一个窗体
final Frame f = new Frame("带按钮窗体");
f.setBounds(400, 150, 500, 500);
// 将窗体的布局管理器设为:null
f.setLayout(null);
// 添加一个按钮
final Button but = new Button("按我啊!");
but.setSize(100, 50);
but.setLocation(200, 150);
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Random rdm = new Random();
int x = rdm.nextInt(f.getWidth());
int y = rdm.nextInt(f.getHeight());
if (x + but.getWidth() > f.getWidth()) {
x = f.getWidth() - but.getWidth();
}
if (y + but.getHeight() > f.getHeight()) {
y = f.getHeight() - but.getHeight();
}
but.setLocation(x, y);
}
});
// 将按钮添加到窗体
f.add(but);
// 为窗体添加关闭事件
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 显示窗体
f.setVisible(true);
}
}
</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">package com.ityssd;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
}
}
</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">package com.ityssd;
import java.awt.Button;
import java.awt.Frame;
import java.util.Random;
public class MyThread extends Thread {
private Button[] butArray;
public MyThread(Frame f, Button[] butArray) {
this.butArray = butArray;
}
@Override
public void run() {
// 先全部隐藏
for (Button but : butArray) {
but.setVisible(false);
}
// 随机抽取一个,并显示此按钮
Random rdm = new Random();
while (true) {
int index = rdm.nextInt(butArray.length);
butArray[index].setVisible(true);
// 只显示1秒,然后隐藏
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
butArray[index].setVisible(false);
}
}
}
</span>
四、更改背景颜色
<span style="font-family:Microsoft YaHei;font-size:14px;">package com.ityssd;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
* 通过鼠标移动到按钮上更改背景色案例
* 需要的组件:窗体、四个按钮、为四个按钮添加事件
*/
public class Demo_更改背景颜色 {
public static void main(String[] args) {
// 创建一个窗体对象
final Frame f = new Frame("改变窗体背景颜色");
// 设置窗体大小
f.setBounds(400, 150, 400, 400);
// 设置窗口监听器(屏幕适配器匿名内部类)
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 设置流式布局管理器
f.setLayout(new FlowLayout());
// 实例化一些按钮
Button redBut = new Button("红色");
Button greenBut = new Button("绿色");
Button blueBut = new Button("蓝色");
Button resetBut = new Button("还原");
// 设置事件
redBut.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
// 改变窗体背景色
f.setBackground(Color.red);
}
});
greenBut.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
// 改变窗体颜色
f.setBackground(Color.green);
}
});
blueBut.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
// 改变窗体颜色
f.setBackground(Color.blue);
}
});
resetBut.addMouseListener(new MouseAdapter(){
@Override
public void mouseEntered(MouseEvent e){
//改变窗体颜色
f.setBackground(Color.white);
}
});
//将按钮添加到窗体
f.add(redBut);
f.add(greenBut);
f.add(blueBut);
f.add(resetBut);
f.setVisible(true);
}
}
</span>
五、将文本框的值复制到文本域
<span style="font-family:Microsoft YaHei;font-size:14px;">package com.ityssd;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
* 把文本框的值转移到文本域案例:
* 需要的组件:1.窗体; 2.文本框:TextField; 3.按钮:Button; 4.文本域:TextArea
*
* 窗体:Frame
* 菜单栏:MenuBar 菜单:Menu 菜单项:MenuItem
*
* 事件:
* 1.窗口事件:里面的具体事件:WindowListener 2.鼠标事件:MouseListener
* 3.键盘是件:KeyListener 4.按钮语意事件:ActionListener
*
* 事件处理:使用事件接口;使用适配器
*/
public class Demo_把文本框的值转移到文本域 {
public static void main(String[] args) {
//创建窗口对象
Frame f = new Frame("将文本框中的数据转移到文本域");
//设置窗体大小
f.setBounds(400, 150, 400, 400);
//设置窗口监听器(匿名内部类屏幕适配器)
f.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//将窗体设定为流式布局管理器
f.setLayout(new FlowLayout());
//实例化所需控件(按钮:Button 文本框:TextField 文本域:TextArea)
final TextField txt = new TextField(20);
final Button but = new Button("转移数据");
final TextArea txtArea = new TextArea(10,30);
//为按钮添加事件
but.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
//获取文本框中的内容
String s = txt.getText();
if(s.trim().length()==0){
return;
}
//清空文本框
txt.setText("");
//转移到文本域中
String oldStr = txtArea.getText();
if(oldStr.trim().length()==0){
txtArea.setText(s);
}else{
txtArea.setText(oldStr+"\n\t"+s);
}
//请求焦点
txt.requestFocusInWindow();
}
});
}
}
</span>