文章目录
一、GUI(图形用户接口)
1. 用图形的方式来显示计算机操作界面,更方便直观
2. java.awt(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件
3. javax.swing在AWT的基础上,建立的一套图形界面系统,其中提高了更多的组件,完全由java实现,增强了移植性,属于轻量级控件
4. Frame类方法都在下面的实例中进行演示
5. 事件监听机制
a) 事件源:事件发生的地方
b) 事件:要发生的事件
c) 事件处理:针对发生的事情做出处理方案
d) 事件监听:将事件源和事件关联起来
6. 适配器设计模式
a) 问题:当接口方法比较多,但是实现类仅使用一个方法,这时也需要将其他方法一并实现
(可以空实现),比较麻烦
b) 解决此问题:在接口类和实现类中间加一个适配器类(适配器类为抽象类,仅仅空实现接口),
实现类(继承适配器类,用哪个就重写哪个适配器类的方法)
适配器类如:WindowAdapter
7. 窗体布局:窗体中各个组件的排列方式
a) 流式布局FlowLayout:从左到右,从上到下
b) 边界布局BorderLayout:将容器分为东、西、南、北、中五个区域,每个区域只能包含一个组件,
并通过相应常量进行表示
c) 网格布局GridLayout:以矩形网格的形式对容器进行布置,容器被分成大小相等的矩形,
一个矩形中放置一个组件
d) 网格包布局GridBagLayout:不要求组件的大小相同便可以将组件垂直、水平或沿基线对齐。
e) 卡片布局CardLayout:将容器组件看成一张卡片,一次只能看到一张卡片,容器充当卡片堆栈。
8. 菜单组件
a) MenuBar:菜单条
b) Menu:菜单
c) MenuItem:菜单项,
d) 先创建菜单条,再创建菜单,每一个菜单中建立菜单项,也可以将菜单添加到菜单中,作为子菜单
e) 通过setMenuBar()方法,将菜单添加到Frame中
二、程序实例
1. 窗体基本设置实例(包含Frame类常用方法)
package test1_frame;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class FrameDemo {
public static void main(String[] args) {
//创建窗体对象
Frame f=new Frame();
//创建窗体对象,并设置窗体标题为zfliu,和f.setTitle("zfliu96");方法功能相同
//Frame f=new Frame("zfliu");
//设置窗体大小
f.setSize(800, 400);
//设置窗体位置
f.setLocation(200,300);
//可以直接设置窗体的位置和大小
//f.setBounds(200, 300, 800, 400);
//设置窗体名字
f.setTitle("zfliu96");
//设置窗体是否可见,先设置好窗体的属性再将其显示出来
f.setVisible(true);
//关闭窗体
//事件源:f
//事件:对窗体进行处理
//事件处理:关闭窗口(System.exit(0));需要实现WindowListener接口,并重写关闭窗口的方法
//事件监听
//使用适配器模式,只需要重写需要用的方法即可,WindowAdapter适配器类
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
}
}
2. 添加并设置按钮功能实例
package test2_button;
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、创建按钮对象,并设置按钮功能
* 3、将按钮添加到窗体中
* 4、窗体显示
* 5、窗体关闭功能
*/
public class ButtonDemo {
public static void main(String[] args) {
Frame f=new Frame("数据转移");
//设置分本框
TextField tf=new TextField(20);
//设置文本域
TextArea ta=new TextArea(10,40);
f.setBounds(400, 300, 400, 300);
Button b=new Button("Button1");
//设置按钮功能
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//获取文本框的内容,并去除字符串前面和后面的空格
String s=tf.getText().trim();
//将字符串内容设置到文本域中
//ta.setText(s);
//追加内容,并换行
ta.append(s+"\n");
//复制结束后可以清楚文本框的内容
tf.setText(null);
//获取光标,使光标一直在文本框内
tf.requestFocus();
}
});
//将按钮添加到窗体中
f.add(tf);
f.add(b);
f.add(ta);
//设置窗体布局模式为流式布局
f.setLayout(new FlowLayout());
//关闭窗口
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setVisible(true);
}
}
3. 鼠标移入、移出按键测试实例
package test3_changecolor;
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) {
Frame f=new Frame("更改颜色");
Button red=new Button("red");
f.setLayout(new FlowLayout());
f.setBounds(400, 200, 800, 400);
f.add(red);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//添加功能:用鼠标控制按钮
//1、动作事件
// red.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent e) {
// f.setBackground(Color.red);
// }
// });
//2、点击事件(与1功能相似都是鼠标点击按键更改颜色)
// red.addMouseListener(new MouseAdapter() {
// public void mouseClicked(MouseEvent e) {
// f.setBackground(Color.red);
// }
// });
//3、进入、退出事件
red.addMouseListener(new MouseAdapter() {
//进入变为红色
public void mouseEntered(MouseEvent e) {
f.setBackground(Color.red);
}
//移出变为白色
public void mouseExited(MouseEvent e) {
f.setBackground(Color.white);
}
});
f.setVisible(true);
}
}
4. 文本框只能输入数字实例
package test4_number;
/*
* 实现文本框输入仅能输入数字的功能
*/
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo {
public static void main(String[] args) {
Frame f=new Frame("只能输入数字");
Label l=new Label("只能输入数字");
TextField tf=new TextField(20);
f.setBounds(200,300,400,200);
f.setLayout(new FlowLayout());
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.add(l);
f.add(tf);
//给文本框添加键盘录入事件
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
//获取文本输入字符
char ch=e.getKeyChar();
//如果是数字则取消事件
if(!(ch>='0'&&ch<='9')) {
e.consume();
}
}
});
f.setVisible(true);
}
}
5. 多级菜单实例
package test5_menu;
/*
* 功能:设置多级菜单,并实现各级菜单的功能
*/
import java.awt.Color;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Demo {
public static void main(String[] args) {
Frame f=new Frame("多级菜单");
f.setBounds(400,300,400,200);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//设置菜单条
MenuBar mb=new MenuBar();
//设置菜单
Menu m1=new Menu("菜单");
Menu m2=new Menu("设置颜色");
//设置菜单项
MenuItem mi1=new MenuItem("退出系统");
MenuItem mi2=new MenuItem("蓝色");
MenuItem mi3=new MenuItem("恢复默认颜色");
m1.add(m2);
m1.add(mi1);
m2.add(mi2);
m2.add(mi3);
mb.add(m1);
//将菜单条添加到窗体中
f.setMenuBar(mb);
//设置菜单项功能
mi1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
mi2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
f.setBackground(Color.blue);
}
});
mi3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
f.setBackground(Color.WHITE);
}
});
f.setVisible(true);
}
}