马士兵 J2SE 第11章 GUI编程 事件模型ACTIONEVENT TEXTFIELD事件监听 内部类 PAINT adapter和repaint window事件 键盘事件

BUTTON事件监听

package com.zzk.cn;

import java.awt.*;
import java.awt.event.*;

public class TestActionEvent {
    public static void main(String[] args) {
    	Frame f=new Frame("Test");
    	Button b=new Button("Press Me!");

    	Monitor bh=new  Monitor();
    	b.addActionListener(bh);
    	f.add(b,BorderLayout.CENTER);
    	f.pack();
    	f.setVisible(true);
    }
}

class Monitor implements ActionListener {
	public void actionPerformed(ActionEvent e) {
		System.out.println("a button has been pressed");
	}
}
/*	范例名称:Java事件处理举例
 * 	源文件名称:TestActionEvent2.java
 *	要  点:
 *  	1. 一个事件源组件上可以同时注册多个监听器
 *		2. 一个监听器对象可以同时注册到多个事件源组件上
 *		3. 事件源的信息可以随它所触发的事件自动传递到所有注册过的监听器
 */

package com.zzk.cn;

import java.awt.*;
import java.awt.event.*;

public class TestActionEvent2 {
    public static void main(String[] args) {
    	Frame f=new Frame("test");
    	Button b1=new Button("Start");
    	Button b2=new Button("Stop");

    	Monitor2 bh=new Monitor2();

    	b1.addActionListener(bh);
    	b2.addActionListener(bh);
    	b2.setActionCommand("gameover");

    	f.add(b1,"North");
    	f.add(b2,"Center");

    	f.pack();
    	f.setVisible(true);

    }
}

class Monitor2 implements ActionListener {
	public void actionPerformed(ActionEvent e) {
		System.out.println("a button has been pressed,"+
	    "the relative info is:\n"+e.getActionCommand());
	}
}

TEXTFIELD事件监听

输入TEXT中的字符都可以在命令行中显示出来

package com.zzk.cn;

import java.awt.*;
import java.awt.event.*;

public class TFActionEvent {
    public static void main(String[] args) {
    	new TFFrame();
    }
}

class TFFrame extends Frame
{
	TFFrame()
	{
		TextField tf=new TextField();
		add(tf);
		tf.addActionListener(new TFActionListener());
		pack();
		setVisible(true);
	}
}

class TFActionListener implements ActionListener
{
	public void actionPerformed(ActionEvent e)
	{
		TextField tf=(TextField)e.getSource();
		System.out.println(tf.getText());
		tf.setText("");
	}
}

增加密码内容在输入框中显示*

package com.zzk.cn;

import java.awt.*;
import java.awt.event.*;

public class TFPassword {
    public static void main(String[] args) {
    	new TFFrame2();
    }
}

class TFFrame2 extends Frame
{
	TFFrame2()
	{
		TextField tf=new TextField();
		add(tf);
		tf.addActionListener(new TFActionListener());

		//注意这个!回显字符
		tf.setEchoChar('*');
		pack();
		setVisible(true);
	}
}

class TFPasswordListener2 implements ActionListener
{
	public void actionPerformed(ActionEvent e)
	{
		TextField tf=(TextField)e.getSource();
		System.out.println(tf.getText());
		tf.setText("");
	}
}

TEXTFIELD加法计算器 程序

package com.zzk.cn;

import java.awt.*;
import java.awt.event.*;

public class TFMath {
    public static void main(String[] args) {
    	new TFFrame3().launchFrame();
    }
}

class TFFrame3 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());

		setLayout(new FlowLayout());
		add(num1);
		add(lblPlus);
		add(num2);
		add(btnEqual);
		add(num3);
		pack();
		setVisible(true);

	}

	private 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));
		}
	}
}

PAINT的使用

package com.zzk.cn;

import java.awt.*;

public class TestPaint {
    public static void main(String[] args) {
    	new PaintFrame().launchFrame();
    }
}

class PaintFrame extends Frame {
	public void launchFrame()  {
		setBounds(200,200,640,460);
		setVisible(true);
	}

	public void paint(Graphics g) {
		Color c=g.getColor();
		g.setColor(Color.red);
		g.fillOval(50, 50, 30, 30);//填充椭圆
		g.setColor(Color.green);
		g.fillRect(80, 80, 40, 40);//填充矩形
		g.setColor(c);
	}
}

画点程序

package com.zzk.cn;

import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class MyMouseAdapter {
    public static void main(String[] args) {
    	new MyFrame5("drawing...");
    }
}

class MyFrame5 extends Frame {
	ArrayList points=null;
	MyFrame5(String s) {
		super(s);
		points=new ArrayList();//将点放在数组中
		setLayout(null);//取消默认布局
		setBounds(300,300,400,300);
		this.setBackground(new Color(204,204,255));
		setVisible(true);
		this.addMouseListener(new Monitor3());
	}

	public void paint(Graphics g) {
		Iterator i=points.iterator();
		while(i.hasNext()) {
			Point p=(Point)i.next();
			g.setColor(Color.blue);
			g.fillOval(p.x, p.y, 10, 10);
		}
	}

	public void addPoint(Point p) {
		points.add(p);
	}
}

class Monitor3 extends MouseAdapter {
	public void mousePressed(MouseEvent e) {
		MyFrame5 f=(MyFrame5)e.getSource();
		f.addPoint(new Point(e.getX(),e.getY()));
		f.repaint();
	}
}

关掉窗口

package com.zzk.cn;

import java.awt.*;
import java.awt.event.*;

public class TestWindowClose {
    public static void main(String args[]) {
    	new MyFrame55("MyFrame");
    }
}

class MyFrame55 extends Frame {
	MyFrame55(String s) {
		super(s);
		setLayout(null);
		setBounds(300,300,400,300);
		this.setBackground(new  Color(204,204,255));
		setVisible(true);

		this.addWindowListener(
				new WindowAdapter() {
					public void windowClosing(WindowEvent e) {
						setVisible(false);
						System.exit(-1);
					}
				}
				);

	}
}

第二种写法:

内部类写法

package com.zzk.cn;

import java.awt.*;
import java.awt.event.*;

public class TestWindowClose {
    public static void main(String args[]) {
    	new MyFrame55("MyFrame");
    }
}

class MyFrame55 extends Frame {
	MyFrame55(String s) {
		super(s);
		setLayout(null);
		setBounds(300,300,400,300);
		this.setBackground(new  Color(204,204,255));
		setVisible(true);

		this.addWindowListener(new MyWindowMonitor());

//		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);
		}
	}
}
package com.zzk.cn;

/*	范例名称:匿名类在事件处理中的使用
 * 	源文件名称:TestAnonymous2.java
 *	要  点:
 *		1. 匿名类只能是内部类
 *		2. 匿名类的两种创建方式----既可以继承父类、也可以单重实现接口
 */
import java.awt.*;
import java.awt.event.*;

public class TestAnonymous2 {
    Frame f=new Frame("Test");
    TextField tf=new TextField(10);
    Button b1=new Button("Start");

    public TestAnonymous2() {
    	f.add(b1,"North");
    	f.add(tf,"South");

    	b1.addActionListener(new ActionListener() {
    		private int i;
    		public void actionPerformed(ActionEvent e) {
    			tf.setText(e.getActionCommand()+ ++i);
    		}
    	}

    			);

    	f.addWindowListener(new WindowAdapter() {
    		public void windowClosing(WindowEvent e) {
    			System.exit(0);
    		}
    	});

    	f.pack();
    	f.setVisible(true);
    }

    public static void main(String args[]) {
    	new TestAnonymous2();
    }

}

键盘上下左右事件

package com.zzk.cn;

import java.awt.*;
import java.awt.event.*;

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);
		addKeyListener(new MyKeyMonitor());
		setVisible(true);
	}

	class MyKeyMonitor extends  KeyAdapter {
		public void keyPressed(KeyEvent e) {
			int keyCode = e.getKeyCode();
			if(keyCode == KeyEvent.VK_UP) {
				System.out.println("UP");
			}
			if(keyCode == KeyEvent.VK_DOWN) {
				System.out.println("DOWN");
			}
			if(keyCode == KeyEvent.VK_LEFT) {
				System.out.println("LEFT");
			}
			if(keyCode == KeyEvent.VK_RIGHT) {
				System.out.println("RIGHT");
			}
		}
	}
}
时间: 2025-01-31 01:52:10

马士兵 J2SE 第11章 GUI编程 事件模型ACTIONEVENT TEXTFIELD事件监听 内部类 PAINT adapter和repaint window事件 键盘事件的相关文章

马士兵 J2SE 第11章 GUI编程 GUI初步和布局管理器

/* 范例名称:Frame 应用举例 * 源文件名称:TestFrame.java * 要 点:Frame组件的创建及显示设置 */ import java.awt.*; public class TestFrame { public static void main( String args[]) { Frame f = new Frame("My First Test"); f.setLocation(300, 300); f.setSize( 170,100); f.setBac

Android编程之利用服务实现电话监听的方法_Android

本文实例讲述了Android编程之利用服务实现电话监听的方法.分享给大家供大家参考,具体如下: 1. 启动模拟器,部署应用 2. 利用模拟器控制器发送短信启动服务(查看日志输出判断是否成功) 3. 向模拟器拨打电话,并接听,挂断电话后,利用文件管理查看对应的cache目录或者sdcard中生成了3gp文件,并将其复制到pc中播放以验证. 清单设置(一个receiver,一个service,若干权限) <uses-permission android:name="android.permis

Android编程之利用服务实现电话监听的方法

本文实例讲述了Android编程之利用服务实现电话监听的方法.分享给大家供大家参考,具体如下: 1. 启动模拟器,部署应用 2. 利用模拟器控制器发送短信启动服务(查看日志输出判断是否成功) 3. 向模拟器拨打电话,并接听,挂断电话后,利用文件管理查看对应的cache目录或者sdcard中生成了3gp文件,并将其复制到pc中播放以验证. 清单设置(一个receiver,一个service,若干权限) <uses-permission android:name="android.permis

高质量C++/C编程指南-第11章-其它编程经验(2)

11.1.3 const成员函数 任何不会修改数据成员的函数都应该声明为const类型.如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性. 以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数.编译器将指出GetCount函数中的错误. class Stack { public: void Push(int elem); int Pop(void); int

高质量C++/C编程指南-第11章-其它编程经验(1)

11.1 使用const提高函数的健壮性看到const关键字,C++程序员首先想到的可能是const常量.这可不是良好的条件反射.如果只知道用const定义常量,那么相当于把火药仅用于制作鞭炮.const更大的魅力是它可以修饰函数的参数.返回值,甚至函数的定义体. const是constant的缩写,"恒定不变"的意思.被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:"Use const whenever you

《Android的设计与实现:卷I》——第3章 3.6init循环监听处理事件

3.6 init循环监听处理事件 init触发所有Action后,便进入一个无限循环,在这个无限循环里首先执行两条指令: execute_one_command()和restart_processes(). 其中execute_one_command()已经分析过,用来启动Action和Service:restart_processes()也容易理解,就是重启这些Action和Service.此后便在init中调用了系统函数poll等待一些事件发生,代码如下: nr = poll(ufds, f

马士兵J2SE-第六章-常用类-基本数据类型包装类、Maths类、File类

基本数据类型包装类 public class test { public static void main(String[] args) { Integer i=new Integer(100); Double d=new Double("123.456"); int j=i.intValue()+d.intValue(); float f=i.floatValue()+d.floatValue(); System.out.println(j); System.out.println(

马士兵J2SE-第三章-面向对象-基础及重载

面向对象: //面向对象的方法写一段程序,要求能够手动修改年月日的信息 class Date { private int day; private int month; private int year; public Date (int d, int m, int y) { day = d; month = m; year = y; } public void setDay(int d) { day=d; } public void setMonth(int m) { month = m; }

096_《Delphi5高级编程丛书之二:GUI编程》

<Delphi5高级编程丛书之二:GUI编程> Delphi 教程 系列书籍 (096) <Delphi5高级编程丛书之二:GUI编程> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3 Part4 作者: 徐新华 出版社: 人民邮电出版社 书号: 出版日期:2000年4月 开本: 787*1092 1/16 页码: 496 版次: 2000年4月第一版第一次印刷 内容简介 本书全面深入地介绍了如何运用 Delphi 5进