1、事件源类通过创建对象到事件源对象跟监听者是委托事件处理关系。触发事件进行事件传递到接收事件对象。监听者到监听对象到接收事件对象最后处理事件。
2、总结处理事件的具体方法:确认触发的事件,取得事件类的名字,并删掉其中“Event”字样,加上“listener”字样。这就是我们类需要实现的事件监听类接口。
3、焦点事件:任何GUI对象的获得或失去焦点都被视为焦点事件,并且事件源必须向事件监听器通知事件对象已失去或获得焦点。焦点监听器需要实现两个方法:focusGained和focusLost。要进行错误检查或数据校验时,对焦点的捕捉就显得尤其重要。/4、键盘事件:在按下或释放键盘上的一个键时,将生成键盘事件。
5、keyEvent类包含用来表示按下或点击的键。/6、鼠标事件:任何时候移动、单击、按下或释放鼠标,都会生成鼠标事件。有两种监听器:MouseListener和MouseMotionListener。
7、ImageIcon类图标是固定大小的图像,通常很小,用于点缀组件,可通过ImageIcon类获得。
按钮可以使用以下任一构造函数来创建按钮:
JButton():新建一个空按钮
JButton(String text):新建一个包含给定字符串的按钮
8、GUI绘图:java提供了丰富的绘图操作,其中大部分对图形、文本、图像的操作方法都定义在Graphics类中,Graphics类是java.awt.包中的一部分。Graphics类的对象表示进行绘图时的设备环境。Graphics类封装了平台的细节信息,使得绘图时不必考虑平台的差异,统一绘制图形成成为可能。Graphics对象记录针对绘制图形和文本的一系列设置,比如设置的图标或当前颜色、字体等、在java语言中,所有绘制都必须通过一个图形对象实现。Graphics类提供了绘制一些图形的方法,包括:绘制文本、绘制各种图形、填充图形、绘制图像等。
9、java图形坐标系统:java的图形坐标原点(0,0)位于屏幕的左上角,坐标度量一像素为单位,水平向右为x轴的正方向,竖直向下为y轴的正方向,每个坐标点的值表示屏幕上的一个像素点的位置,所有坐标点的值都取得整数。
10、图形上下文:也称图形环境,指允许用户在屏幕上绘制图形的信息,它由Graphics类封装,可以通过Graphics类的getGraphics()方法返回获得;也可以通过重写component类的paint()方法,通过传参获得 public void paint(Graohice g);图形上下文表示一个绘制图层,如组件的显示层。打印机上的一页、或一个屏幕外图像缓冲区。draw画 fill填充。
11、请求重绘方法:当图像界面需要重新显示时会调用paint(Graphics g)方法。例如当运行窗口被另一个窗口覆盖,最小化窗口,初始化的时候。当然也可手动完成重绘,
只需要调用repaint()或 update()方法,其中repaint()方法会强制系统调用update方法。
repaint()方法原型:void repaint()重绘整个窗口。
void repaint(int left,int top ,int width,int height)重绘制度区域。
默认的update方法是先用默认的背景颜色填充当前窗口,在调用paint方法,
当然也可重新写update方法,从而可执行更细致的重绘任务。
12、
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
//1.创建名为Login的类,在该类中创建一个名为InitUI的方法,图形界面就在此方法中实现
public class Login {
public static void main(String[] args) {
Login log=new Login();
log.InitUI();
}
public void InitUI()
{
//1.1创建一个顶级容器,也就是空白窗口,并为此窗口设置属性(窗口名称,大小,显示位置,关闭设置)
// 用JFrame创建一个名为frame的顶级容器,需要添加的包名为javax.swing.JFrame
JFrame frame=new JFrame();
//设置窗口名称
frame.setTitle(“Login”);
//设置窗口大小
frame.setSize(540,427);
//设置窗口位于屏幕中央
frame.setLocationRelativeTo(null);
//参数为3时,表示关闭窗口则程序退出
frame.setDefaultCloseOperation(3);
//1.2设置窗体上组件的布局,此处使用流式布局FlowLayout,流式布局类似于word的布局
//用FlowLayout创建一个名为f1的对象,需要添加的包名为java.awt.FlowLayout,其中LEFT表示左对齐,CENTER表示居中对齐,RIGHT表示右对齐
FlowLayout f1=new FlowLayout(FlowLayout.LEFT);
//frame窗口设置为f1的流式左对齐
frame.setLayout(f1);
//1.3在窗体上添加图片,文字
//在添加图片之前,先把图片从磁盘中加载到内存中来,使用ImageIcon,需要添加的包名为javax.swing.ImageIcon,括号中为图片路径,路径中要使用”/”,不能使用”\”
ImageIcon imag1=new ImageIcon(“H:/1.png”);
//JLabel可在顶级容器中添加图片文字,需要添加的包名javax.swing.JLabel,此处将上面加载的图片创建为一个JLabel对象
JLabel pic1=new JLabel(imag1);
//将创建的图片对象添加到 窗口上
frame.add(pic1);
//创建一个空的JLabel,它的长度宽度为110,30,因为窗口是流式左对齐,为了将”账号”一栏添加在正中间,所以左侧由空的JLabel填充
JLabel name1=new JLabel();
//设置空JLabel长度大小,此处不能使用setSize设置大小,setSize只能设置顶级容器大小,此处用setPreferredSize,Dimension给出大小,需要添加的包名为java.awt.Dimension.
name1.setPreferredSize(new Dimension(110,30));
//将空JLabel添加入窗口
frame.add(name1);
//同上,此处添加的不是空JLabel,而是内容为“账号”的JLabel
JLabel name=new JLabel(“账号:”);
frame.add(name);
//JTextField在窗口上添加一个可输入可见文本的文本框,需要添加的包名为javax.swing.JTextField.
JTextField nametext=new JTextField();
//设置文本框大小
nametext.setPreferredSize(new Dimension(220, 30));
//添加到窗口上
frame.add(nametext);
//同name1
JLabel name2=new JLabel();
name2.setPreferredSize(new Dimension(110,30));
frame.add(name2);
//同name1
JLabel name3=new JLabel();
name3.setPreferredSize(new Dimension(110,30));
frame.add(name3);
//同name
JLabel password=new JLabel(“密码:”);
frame.add(password);
//JPasswordField创建一个密码文本框,里面输入的文本是不可见的,其他同nametext
JPasswordField passwordtext=new JPasswordField();
passwordtext.setPreferredSize(new Dimension(220, 30));
frame.add(passwordtext);
//同name1
JLabel name4=new JLabel();
name4.setPreferredSize(new Dimension(110,30));
frame.add(name4);
//同name1
JLabel name5=new JLabel();
name5.setPreferredSize(new Dimension(220,30));
frame.add(name5);
//JButton创建一个可点击的按钮,按钮上可显示文本图片
JButton bu=new JButton(“登录”);
bu.setPreferredSize(new Dimension(80,30));
frame.add(bu);
//设置窗口可见,此句一定要在窗口属性设置好了之后才能添加,不然无法正常显示
frame.setVisible(true);
}
13、
JFrame frame = new JFrame();
//设置窗体容器组件对象的属性值:标题、大小、显示位置、关闭操作、可见。
frame.setTitle(“画板”);
frame.setSize(700,700);
frame.setDefaultCloseOperation(3);
frame.setLocationRelativeTo(null);
//实例化FlowLayout流式布局类的对象,设置对齐方式
FlowLayout fl = new FlowLayout(FlowLayout.CENTER);
frame.setLayout(fl);
String[] typeArray = {"直线","矩形","圆","文字","铅笔","刷子","橡皮","喷枪","长方体"};
for(int i=0;i<typeArray.length;i++) {
JButton button = new JButton(typeArray[i]);
button.setPreferredSize(new Dimension(80,30));
frame.add(button);
}
Color[] colorArray = {Color.red,Color.green,Color.blue};
for(int i=0;i<colorArray.length;i++) {
JButton button = new JButton();
button.setBackground(colorArray[i]);
button.setPreferredSize(new Dimension(30,30));
frame.add(button);
}
frame.setVisible(true);//显示窗体
//获取窗体上的画笔对象
Graphics g = frame.getGraphics();
//在实例化DrawListener类的对象时将获取的窗体对象传递过去
DrawListener dl = new DrawListener(frame);
//给窗体添加鼠标事件监听方法,指定事件的处理类的对象dl;
dl.setG(g);//设置方法将画笔g传到DrawListener
}
}
14、public void mouseDragged(MouseEvent e){
System.out.println(“拖动”);
}
public void mouseMoved(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
System.out.println("点击");
}
public void mousePressed(MouseEvent e) {
System.out.println("按下");
}
public void mouseReleased(MouseEvent e) {
System.out.println("释放");
}
public void mouseEntered(MouseEvent e) {
System.out.println("进入");
}
public void mouseExited(MouseEvent e) {
System.out.println("离开");
}