1.概述
- 用图形的方式,来显示计算机操作的界面,这样更方便更直接;
- java为GUI提供的对象都在java.Awt和javax.Swing两个包中
- java.Awt抽象窗口工具包,需要调用本地系统方法实现功能(受系统平台影响,和系统依赖性教大)。属于重量级控件。
- javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件。而且完全有java实现。增强了移植行,属于轻量级控件。
- 常用构件的继承关系图
Container:为容器,是一个特殊的组件,该组件可以通过add方法添加其他组件进来。
比如:Panel面板上可以放多个按钮Button/Label等。
- 布局管理器
- FlowLayout布局
- 居中排放,然后从左到右
- BorderLayout边界布局管理器
- 东西南北中
- Frame默认的布局管理器
- GridLayout(卡片布局管理器)
- 选项卡
- GridBagLayout(网格包布局管理器)
- 非规则的矩阵(eg:计算器)
- 步骤
- 创建frame窗体;
- 对窗体进行基本设置
- 比如大小、位置、布局
- 定义组件
- 将组件通过窗体的add方法添加到窗体上
- 让窗体显示,通过setVisible(true)方法
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
public class AwtDemo {
public static void main(String[] args) {
//构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
Frame f= new Frame("my Frame");
//设置窗体的长、宽
f.setSize(500,400);
//窗体显示出来时的坐标位置
f.setLocation(300,200);
//设置窗体的布局
f.setLayout(new FlowLayout());//流式布局
//添加一个button
Button b = new Button("我是一个按钮");
//需要添加到窗体上
f.add(b);
//不加这句话窗体不会显示出来的
f.setVisible(true);
}
}
效果图是:(但是窗体的关闭按钮不能用)
3.事件监听机制
事件监听机制的特点
- 事件源
- 就是awt包或这swing包中的那些图形界面组件
- 事件
- 每一个事件源都有自己特有的对应事件和共性事件
- 监听器
- 将可以出发某一个事件的动作(不只一个动作)都已经封装到了监听器中
- 事件处理
实例:演示上述窗体的关闭、打开、激活(显示在最前端)
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class AwtDemo {
public static void main(String[] args) {
//构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
Frame f= new Frame("my Frame");
//设置窗体的长、宽
f.setSize(500,400);
//窗体显示出来时的坐标位置
f.setLocation(300,200);
//设置窗体的布局
f.setLayout(new FlowLayout());//流式布局
//添加一个button
Button b = new Button("我是一个按钮");
//需要添加到窗体上
f.add(b);
//添加关闭窗体监听
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.out.println("关闭");
System.exit(0);
}
//激活窗体
public void windowActivated(WindowEvent e)
{
System.out.println("激活");
}
//打开窗体
public void windowOpened(WindowEvent e)
{
System.out.println("打开");
}
});
//不加这句话窗体不会显示出来的
f.setVisible(true);
}
}
4.按钮事件
上述窗体关闭优化+点击按钮关闭窗体
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class ButtonDemo {
Frame f;
Button Closebut;
Button ClickBut;
Button PrekeyBut;
public static void main(String[] args) {
new ButtonDemo();
}
public ButtonDemo() {
init();
}
public void init() {
f = new Frame("My Frame");
// 对Frame进行基本设置。坐标长宽
f.setBounds(300, 100, 500, 400);
f.setLayout(new FlowLayout());
Closebut = new Button("点击按钮关闭窗体");
f.add(Closebut);
ClickBut = new Button("测试鼠标点击事件");
f.add(ClickBut);
PrekeyBut= new Button("测试键盘事件");
f.add(PrekeyBut);
myEvent();
f.setVisible(true);
}
public void myEvent() { // 关闭窗体
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 让按钮具备退出程序的功能
/*
* 按钮就是事件源 监听器是addActionListener
*/
Closebut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);//点击按钮关闭窗体
}
});
//鼠标点击事件
ClickBut.addMouseListener(new MouseAdapter()
{
private int count=1;
private int clickCount=1;
private int DoubleclickCount=1;
//光标定位到按钮上,就输出一次
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入到该组件"+count++);
}
//单击、双击
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
System.out.println("双击动作"+DoubleclickCount++);
else
System.out.println("单击动作"+clickCount++);
}
});
//给Prekeybut添加一个键盘监听
PrekeyBut.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER);
System.exit(0);
}
});
}
}
运行结果:点击第一个按钮,窗体关闭
光标移动到第二个按钮上:鼠标进入到该组件1
单击第二个按钮:单击动作1
双击第二个按钮:双击动作2
点击第三个按钮:点击键盘上的ctrl和enter组合键,关闭窗体