Java GUI 基础知识2 监听机制

TestActionEvent.java

没有调用方法,但是有反应。反应自己要编写程序有反应。

事件模型:一定要有某些反应。

写程序,监听的操作是自动发生的,一直监听。钩子函数,(回调函数)

怎么让它自动执行,首先告诉人家你的方法名是什么,也不知道,但是这样好像也不行,

实现某个特定的接口,然后button类里面也有特定的方法。

事件分很多中,监听事件的接口也有很多。但某件发生时,封装成一个对象,当成一个参数,传递给监听事件。

栗子:TestActionEvent2.java


通过把actionCommand,把一个按钮的acitonCommand设置为别的。用来区别不同的按钮。


栗子:TFActionEvent.java

TextField tf = (TextField)e.getSource();拿到事件源,把这个源对象当作ActionEvent的父类。

所以需要强制类型转换。

栗子:TFPassword.java


内部类:

Frame像一个大管家,我们要拿到这个大管家的引用。

不需要内部的东西。

持有对方的引用。

直接访问大管家。

如下面:


门面模式。拿到管家的引用。和谁有关系,使用大管家访问他。




栗子:

package com.zhj.www;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.*;public class TFMath {public static void main(String[] args) {new TFFrame().launchFrame();}
}
class TFFrame extends Frame{TextField num1,num2,num3;public void launchFrame() {num1 =new TextField(10);num2 =new TextField(10);num3 =new TextField(15);//初始化Label lblPlus = new Label("+");Button btnEqual = new Button("=");//btnEqual.addActionListener(new MyMonitor(this));btnEqual.addActionListener(new MyMonitor());setLayout(new FlowLayout());add(num1);add(lblPlus);add(num2);add(btnEqual);add(num3);pack();setVisible(true);}/*内部类:随意访问成员变量和方法,class文件带有美元符号是内部类*/class MyMonitor implements ActionListener{public void actionPerformed(ActionEvent e) {int n1 =Integer.parseInt(num1.getText());int n2 =Integer.parseInt(num2.getText());num3.setText(""+ (n1+n2));}}
}
/*
class MyMonitor implements ActionListener{/*TextField num1,num2,num3;public MyMonitor(TextField num1,TextField num2,TextField num3) {this.num1 = num1;this.num2 = num2;this.num3 = num3;}*//*大管家模式*//*TFFrame tfFrame =null;//持有Frame的引用public MyMonitor(TFFrame tfFrame) {this.tfFrame = tfFrame;}public void actionPerformed(ActionEvent e) {int n1 =Integer.parseInt(tfFrame.num1.getText());int n2 =Integer.parseInt(tfFrame.num2.getText());tfFrame.num3.setText(""+ (n1+n2));}
}
*/
---------------------------------------------------------------------------------------------------------------------



TestPaint.java

g就是画笔,Graphics类

paint是重写Container里的方法。

paint方法什么时候会被调用?缩小或扩大窗口,也就是重画的时候。

恢复现场->Color c = g.getColor();g.setColor(c);

先调用update()->paint()。Updata()实现双缓冲。



MouseAdapter实现MouseListener接口。

为什么要这样?

因为MouseListener有6个方法,我们需要全部写。

MouseAdapter实现了MouseListener接口,只不过是空的,

我们只需要重写我们需要的MouseAdapter的某个方法。

 

事件发生时,他会把这个事件的信息包装成一个对象(MouseEvent e)。

Point对象,AWT类中有一个点对象,封装了x,y。

f.repaint();//对当前点的重画,对Frame强制进行重画。


TestWindowClose.java

TestWindowClose.java

package com.zhj.www;import java.awt.Color;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TestWindowClose {public static void main(String[] args) {new MyFrame55("MyFrame");}
}
class MyFrame55 extends Frame{public MyFrame55(String s) {super(s);/*Frame*/setLayout(null);setBounds(300,300,400,300);this.setBackground(new Color(204, 204, 255));setVisible(true);/*添加监听*///this.addWindowListener(new MyWindowMonitor());//匿名的内部类 new 一个WindowAdapter(父类)this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {setVisible(false);System.exit(-1);}});}/*//内部类class MyWindowMonitor extends WindowAdapter{public void windowClosing(WindowEvent e) {setVisible(false);System.exit(0);//0是正常退出,-1是非正常退出。}}*/
}


事件WindowEvent类,处理事件的接口WindowListener

匿名的内部类:但要看懂,什么时候使用匿名类?

经常修改不要使用匿名类。



package com.zhj.www;import java.awt.Frame;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;public class TestKey {public static void main(String[] args) {new KeyFrame().launchFrame();}
}
class KeyFrame extends Frame{public void launchFrame() {setSize(200, 200);setLocation(300, 300);this.addKeyListener(new MyKeyMonitor());setVisible(true);}class MyKeyMonitor extends KeyAdapter{public void keyPressed(KeyEvent e) {//System.out.println("ok");int keyCode = e.getKeyCode();if(keyCode ==KeyEvent.VK_UP) {System.out.println("up");}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 二、向量(接口与实现and可扩容向量)

ADT操作实例:Disordered:显示出3对逆序紧邻对。Vector模板类初始有效空间为0;基于复制的构造描述区间:左闭右开 为什么*2?有限时间内不必要为扩容而打断。 2、可扩充向量左移一位:加一倍

Android 服务(Service)

一、服务的解释 服务(Service)是Android中实现后台运行的解决方案,它适合那些去执行不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖任何的与任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应…

Moravec角点检测算子

Moravec角点检测算子 Moravec 在1981年提出Moravec角点检测算子[1],并将它应用于立体匹配。 首先, 计算每个像素点的兴趣值, 即以该像素点为中心, 取一个w*w(如:5x5)的方形窗口, 计算0度、45度、90度、135度四个方向灰度差的平方和, 取其中的最小值作为该像素点的兴…

文件夹生成工具

很简单的一个小工具,输入一个字符串,可以为你生成相应的文件夹. 至于有什么用?我公司一个策划拿一顿饭给我要的. 下载地址: http://pan.baidu.com/s/1d0ewl 转载于:https://www.cnblogs.com/WhyEngine/p/3350053.html

(转载)深入理解Linux中内存管理---分段与分页简介

首先,必须要阐述一下这篇文章的主题是Linux内存管理中的分段和分页技术。 来回顾一下历史,在早期的计算机中,程序是直接运行在物理内存上的。换句话说,就是程序在运行的过程中访问的都是物理地址。如果这个系统只运行一个程序&…

java中main函数的args参数

先说一下args的作用:我们习惯将一些有用的参数传递给我们定义的函数,那么可曾想过有参数传递给main函数?args就是传递给main函数的一个数组参数。可是main函数作为程序(application程序)的入口点,是由系统自动调用的,怎…

黑马程序员-------------(十)Java基础知识加强(一)

JDK1.5新特性 目录1.之前已经学习过的JDK1.5新特性2.静态导入 StaticImport3.可变参数 ...4.高级for循环5.枚举6.泛型 Generic7.注解注:本章全部为重点内容。###################################################################################################…

java例子:九九乘法表

来吧直接上代码&#xff1a;public class Test{public static void main(String[] args) {for(int i 1; i<9;i){for (int j 1; j < i ;j ) {System.out.print(j"x"i""j*i" ");}System.out.print("\n");}} }运行之后&#xff1…

算法:查找

查找算法&#xff08;比较&#xff09;基本思想顺序查找顺序查找也称为线形查找&#xff0c;属于无序查找算法。从数据结构线形表的一端开始&#xff0c;顺序扫描&#xff0c;依次将扫描到的结点关键字与给定值k相比较&#xff0c;若相等则表示查找成功&#xff1b;若扫描结束仍…

query上传插件uploadify参数详细分析

query上传插件uploadify参数详细分析 Uploadify Version 3.2 官网&#xff1a;http://www.uploadify.com/ 注&#xff1a;文件包里有两个js分别是&#xff1a;jquery.uploadify.js 和 jquery.uploadify.min.js&#xff0c;两者其实一样&#xff0c;只需载入其中一个js即可。很明…

type_traits应用

工作遇到这样的例子&#xff0c;对不同数据进行计算处理&#xff0c;得到一组结果集&#xff0c;包括计数、比例等。各个计算处理过程不同&#xff0c;结果集数据结构相同&#xff0c;但并非所有计算过程均有计数、比例的结果&#xff0c;有些可能只有计数&#xff0c;有些只有…

那些不能错过的XCode插件

XCode颜色显示插件ColorSense代码里的那些冷冰冰的颜色数值&#xff0c;到底时什么颜色&#xff1f;如果你经常遇到这个问题&#xff0c;每每不得不运行下模拟器去看看&#xff0c;那么这个插件绝对不容错过。更彪悍的是你甚至可以点击显示的颜色面板&#xff0c;直接通过系统的…

用JSLint精炼提升JavaScript代码

由于移动应用的盛行和HTML5的广泛运用&#xff0c;JavaScript正越来越流行。JavaScript受欢迎的部分原因是因为它的灵活便捷&#xff0c;你可以快速上手&#xff0c;它不需要重量级的开发环境&#xff0c;也不需要第三方应用支持&#xff0c;只要你打开一个文本编辑器&#xff…

网页选项卡的应用

&#xff08;1&#xff09;功能描述&#xff1a; 在页面中&#xff0c;设置三个不同名称的选项卡&#xff0c;当单机某个选项卡时&#xff0c;下面相对应的区域显示其内容信息&#xff0c;同时选项卡的背景色与内容信息的背景色浑然一体&#xff0c;并且字体加粗&#xff0c;表…

工欲善其事必先利其器系列之:在VS里面折叠js代码

之前用vs写js的时候经常因为js代码过长而且不能像cs文件里面的方法一样进行折叠而抓狂,直到在扩展库发现了这款插件有了它就可以把代码进行折叠了 插件地址转载于:https://www.cnblogs.com/Chendaqian/p/3396702.html

python- 基础 map方法

python中map()函数 map()是 Python 内置的高阶函数&#xff0c;它接收一个函数 f 和一个 list&#xff0c;并通过把函数 f 依次作用在 list 的每个元素上&#xff0c;得到一个新的 list 并返回。 例如&#xff0c;对于list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每个…

C算法编程题(二)正螺旋

前言 上一篇《C算法编程题&#xff08;一&#xff09;扑克牌发牌》 写东西前总是喜欢吐槽一些东西&#xff0c;还是多啰嗦几句吧&#xff0c;早上看了一篇博文《谈谈外企涨工资那些事》&#xff0c;里面楼主讲到外企公司包含的五类人&#xff0c;其实不只是外企如此&#xff0c…

scrapy框架-post使用

scrapy中使用FormRequest向网页提交数据 Scrapy post使用 如何post data&#xff1a; http://httpbin.org/post FormRequest : post请求 GitHub Login 借助浏览器分析登陆行为。 分析post的内容先尝试一次错误的登陆&#xff1a;如下&#xff1a;分析&#xff1a;需要post…

Oracle行列转换小结

目录结构如下&#xff1a;行转列列转行[一]、行转列 1.1、初始测试数据 表结构&#xff1a;TEST_TB_GRADE Sql代码 create table TEST_TB_GRADE ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE VARCHAR2(20 CHAR), SCORE FLOAT ) 初始…

python- 进阶 与flask的搭配使用---定时任务框架APScheduler学习详解

APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动&#xff0c;例如项目中有一个定时统计程序&#xff0c;定时爬出网站的URL程序&#xff0c;定时检测钓鱼网站的程序等等&#xff0c;都涉及到了关于定时任务的问题&#xff0c;第一时间想到的是利用ti…