自学Java-day07
Java GUI编程
一、创建窗口
1.导入java包:import java.awt.Frame; 调用Frame构造方法;
2.调用一个方法让窗体可见:f.show(); 此方法可行,但已过时,被setVisible()方法取代,方法的参数值:true 可见窗口;false 不可见窗口;
3.设置窗体大小:f.setSize(x,y); 单位默认像素;或者
导入java包:import java.awt.Dimension;
Dimension d=new Dimension(400,300);
f.setSize(d);
构造一个 Dimension,并将其初始化为指定宽度和高度。
4.设置窗体位置:f.setLocation(400,200);或者
导入java包:import java.awt.Point;
Point p=new Point(400,200);
f.setLocation( p );
在坐标空间中指定的 (x,y) 位置构造并初始化一个点。
5.f.setBounds(400,200,400,300);//一个方法完成窗体大小和位置的设置
6.设置窗体标题:f.setTitle(“HelloWorld”);或者调用Frame构造方法时,直接设置窗口标题:Frame(String title)即构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
7.延迟函数:Thread.sleep(3000);//延迟三秒
try {
Thread.sleep(3000);//延迟三秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
import java.awt.Frame;
public class FrameDeom {
public static void main(String[] args) {
//创建窗体
Frame f=new Frame();
//Frame f=new Frame("HelloWorld");
//设置窗体标题
f.setTitle("HelloWorld");
//设置窗体大小
f.setSize(400,300);//单位默认像素
// Dimension d=new Dimension(400,300);
// f.setSize(d);
//设置窗体位置
f.setLocation(400,200);
// Point p=new Point(400,200);
// f.setLocation(p);
//调用一个方法,设置让窗体可见
//f.show();//划横线表示过时的
f.setVisible(true);//true 可见窗口,false 不可见
//System.out.println("HelloWorld");
}
}
二、关闭窗口
事件监听机制:
A:事件源 事件发生的地方
B:事件 要发生的事情
C:事件处理 针对发生的事情做出的处理方案
D:事件监听 把事件源和事件关联起来
举例:人受伤事件
事件源:人(具体对象)
Person p1=new Person("小明");
Person p2=new Person("小红");
事件:受伤
interface 受伤接口{
一拳();
一脚();
一板砖();
}
事件处理:
受伤处理类 implements 受伤接口{
一拳(){System.out.println("鼻子流血,洗洗");}
一脚(){System.out.println("晕倒,送到通风处");}
一板砖(){System.out.println("头破血流,送到医院");}
}
事件监听:
p1.注册监听(受伤接口)
import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class FreamDemo01 {
public static void main(String[] args) {
//创建窗体对象
Frame f=new Frame("窗体关闭");
//设置窗体属性
f.setBounds(400,200,400,300);
//设置窗体可见
f.setVisible(true);
//关闭窗体
//事件源:f
//事件:对窗体的处理
//事件处理:关闭窗体(System.exit(0);)
//事件监听
f.addWindowListener(new WindowListener() {
/*注册监听*/ /*窗体监听事件*/
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
//事件处理
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
});
}
}
说明:WindowListener是一个接口,而一个方法的参数是一个接口可以用以下两种方法实现这个接口:
1.自定义一个外部类实现此接口;
2.匿名内部类(此案例使用了);
案例中关闭窗口使用匿名内部类的方法,因为接口内的方法很多,要实现此接口必须要把接口内的方法都实现,如果接口内只有一个方法则用匿名内部类。
在此提供一种新的方法,用适配器类改进。
//用适配器类改进
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
三、添加按钮
窗体布局:窗体中组建的排列方式
1.流式布局
从上至下、从左到右。
2.边界布局
按照东西南北中分布,如果只有一个按钮则会沾满整个屏幕。
3.网格布局
按照矩阵的布局来划分,每个区域只占一块。(计算器)
4.网格包布局
按照矩阵的布局来划分,一个按钮所占的区域不规则。
5.卡片布局
选择不同的按钮ABC,出现不同的画面。
package demo03;
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.awt.Button;
import java.awt.FlowLayout;
/*
* 需求:把按钮添加到窗体,并对按钮添加一个点击事件
* A:创建窗体对象
* B:创建按钮对象
* C:把按钮添加到窗体
* D:窗体显示
*
*/
public class FrameDemo01 {
public static void main(String[] args) {
//创建窗体
Frame f=new Frame("添加按钮");
//设置窗体属性
f.setBounds(400,200,400,300);
//设置布局为流式布局
f.setLayout(new FlowLayout());
//创建按钮对象
Button bu=new Button("按钮");
bu.setSize(20,10);
//把按钮添加到窗体上
f.add(bu);
//设置窗体可以关闭
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
bu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("你再点试试");
}
});
//让窗体可见
f.setVisible(true);
}
}