Applet

生命周期:小应用程序的整个运行过程,可分为4个阶段——初始化启动停止退出

  1. 初始化:初始化对应的方法是init(),它是小应用程序的入口点。在init() 方法中,一般进行如设置程序初始状态、载入图片或字体、获取HTML 参数等工作;
  2. 启动:启动对应的方法是start(),在init() 方法执行之后自动执行start() ;
  3. 停止:停止的对应方法是stop();
  4. 退出:退出对应的方法为destroy()

java.awt 与图形用户界面

在Java 中,图形用户界面(GUI)的每一部分都是由swing 和awt 包描述的。要创建或显示一个界面,首先应创建对象,设置它们的变量,然后调用它们的方法。当把图形用户界面组装在一起,实际使用了两种对象:组件容器

标签和文本域

标签仅仅用于显示一行文本,其内容只能在程序中设置或更改。
java.awt.Label 用来实现它。

import java.awt.*;
import java.applet.Applet;

public class phone extends Applet {
	Label la1 = new Label();
	
	public void init() {
		this.setLayout(new FlowLayout());
		la1.setText("Hi waao");
		this.add(la1);
	}
}

运行结果:
在这里插入图片描述
其中Label() 是构造方法,它生成一个不包含显示内容的标签对象

从这个程序中可见在小应用程序中加入组件需要如下3步:

  1. 用相应的构造方法来生成组件对象;
  2. 在init() 方法中用setLayout 设置布局,可以使用默认布局;
  3. 在init() 方法中用this.add(组件对象名) 在小应用程序中显示组件。
import java.awt.*;
import java.applet.*;

public class phone extends Applet {
	TextField name = new TextField(30);
	TextField pw = new TextField(30);
	Label la1 = new Label();
	Label la2 = new Label();
	
	public void init() {
		this.setLayout(new FlowLayout());
		la1.setText("name:");
		this.add(la1);
		this.add(name);
		la2.setText("password:");
		this.add(la2);
		pw.setEchoChar('*');
		this.add(pw);
		pw.getText();
	}
}

结果:
在这里插入图片描述
此外TextField 还有三种重载的构造方法可以选用:

TextField()								/* 生成一个不显示任何信息的文本域 */
TextField(String text)					/* 用初始文本构造一文本域 */
TextField(String text, int columns)		/* 指定初始文本、列数、构造一文本域 */

TextField 类常用其他方法如表:

方法功能返回类型
addActionListener(ActionListener 1)加入一个ActionListener 对象用于接收在文本域上发生的动作事件void
getListeners(class ListenerType)返回由addxxListener 设置的所有监听器组成的数组EventListener[]
removeActionListener(ActionListener 1)撤销监听器1void
setEchoChar(char c)设置文本域的回显字符void
getEchoChar()返回用于回显的字符char
getColumns()返回文本域列数int
getColumns(int i)设置文本域列数void
setText(String text)设置文本域的显示内容void
getText()返回文本域的显示内容String

Java 中的事件处理机制

编程方法:

  1. 程序开始加上import java.awt.event.* 语句。(对java.awt 中的组件实现事件处理都必须引入java.awt.event 包)
  2. 实现事件监听者所对应的接口,即添加:implements xxListener(事件所对应的接口)
  3. 设置事件监听者:事件源.addxxListener(事件监听者)
  4. 编程实现对应事件接口中的全部方法
import java.awt.*;
import java.applet.*;
import java.awt.event.*;


public class My_application extends Applet implements ActionListener {
	TextField name = new TextField(30);
	TextField pw = new TextField(30);
	TextField pw2 = new TextField(30);
	Label la1 = new Label("name");
	Label la2 = new Label("   password");
	Label la3 = new Label("   show password");
	
	public void actionPerformed(ActionEvent e) {  /* actionPerformed 是ActionListener 接口中的一个抽象方法 */
		pw2.setText(pw.getText());
	}
	
	public void init() {
		this.setLayout(new FlowLayout());
		this.add(la1);
		this.add(name);
		this.add(la2);
		pw.setEchoChar('*');
		pw.addActionListener(this);
		this.add(pw);
		this.add(la3);
		this.add(pw2);
	}
}

结果:
在这里插入图片描述
password 输入密码后键入回车,show password 就会显示出密码明文

事件传递过程:

  1. 文本域pw 中输入回车
  2. 触发ActionEvent
  3. 传递给小应用程序
  4. 执行actionPerformed(ActionEvent e)

这种编程方法的缺点在于无法使用适配器来处理事件,因为Java 不支持多继承,程序不能同时有Applet 和事件适配器两个直接超类


换一种编程风格:事件的监听器不是小应用本身,而是专门定义的事件监听器对象

此程序功能和前同:

public class My_application extends Applet {
	TextField name = new TextField(30);
	TextField pw = new TextField(30);
	TextField pw2 = new TextField(30);
	Label la1 = new Label("name");
	Label la2 = new Label("   password");
	Label la3 = new Label("   show password");
	
	class PasswordHandle implements ActionListener {	
		public void actionPerformed(ActionEvent e) {
			pw2.setText(pw.getText());
		}
	}
	
	public void init() {
		this.setLayout(new FlowLayout());
		this.add(la1);
		this.add(name);
		this.add(la2);
		pw.setEchoChar('*');
		pw.addActionListener(new PasswordHandle());
		this.add(pw);
		this.add(la3);
		this.add(pw2);
	}
}

事件处理流程:

  1. 文本域pw 中键入回车;
  2. 触发ActionEvent;
  3. 传递给PasswordHandle 类对象。

在事件源—密码域pw 中键入回车时,触发ActionEvent,该事件并不传递给容器Applet 也不由事件源本身处理,而是传递给pw 对象的动作事件监听者PasswordHandle 类的对象,然后该对象自动调用其actionPerformed(ActionEvent e) 方法来处理事件。

ActionEvent 类有3个常用的方法:

  1. String getActionCommand():返回动作命令字符串。
    该字符串默认值为事件所对应组件的标签。
  2. int getModifiers():返回按键的值。
  3. object.getSource():返回事件源对象。该方法为ActionEvent 类从祖父类java.util.EventObject 中继承的方法。

除了xxListener 接口外,每个拥有超过一个方法的接口还配有xxAdapter(适配器),适配器是一个类,它为相应接口的每个方法提供一个默认的方法(一般都是不做任何事情的空方法),这样在处理相应事件时,我们可以简单地继承适配器并只对需要覆盖的方法进行编写,而不必对每个接口中的方法都实现。
使用适配器的目的仅仅是简化编程。

键盘事件(KeyEvent)涉及的接口是KeyListener,该接口就有相应的适配器—KeyAdapter。
KeyListener 有三个方法:

  1. public void keyPressed(KeyEvent e):处理当某键被按下时触发的事件;
  2. public void keyReleased(KeyEvent e):处理当某键被放开时触发的事件;
  3. public void keyTyped(KeyEvent e):处理当某键被按下后又被放开时触发的事件。

tf1 区域每按下一个键,tf2 就会输出相同的字符:

public class Key_application extends Applet {
	Label lb1 = new Label("name");
	Label lb2 = new Label("address");
	TextField tf1 = new TextField(10);
	TextField tf2 = new TextField(10);
	
	class TextFieldKeyListener extends KeyAdapter {
		public void keyReleased(KeyEvent e) {
			tf2.setText(tf1.getText());
		}
	}
	
	public void init() {
		add(lb1);
		add(tf1);
		add(lb2);
		tf1.addKeyListener(new TextFieldKeyListener());
		add(tf2);
	}
}

这里TextFieldKeyListener 继承自KeyAdapter,故不需要每个方法都进行实现,只需要实现一个或几个即可

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐