GUI -------- 监听

当点击Frame中的component组件时,会产生相应的效果,但是相应的其必须进行监听,确定是那个对象,那种操作,但是如果用cup进行主动的监听就会消耗大量的资源,所以有了被动的监听,即对应的事件发生后会自动的执行相关的代码。

Button监听:

instance 1:

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

public class MoniterStart {
	public static void main(String[] args) {
		Frame f = new Frame();
		Button b = new Button("Press ");
		f.add(b,BorderLayout.CENTER);
		MyMonitor bh = new MyMonitor();
		b.addActionListener(bh);
		f.setBounds(100, 100, 300, 300);
		f.setVisible(true);
	}

}

class MyMonitor implements ActionListener{
	public void actionPerformed(ActionEvent e) {
		System.out.println("aAH");
	}
}

进行被动监听是你必须确定是什么地方什么类型的componet发出的,我们不可能提供所有的信息,所以我们初建了一个事件对应一个对象,其都实现了一个接口,当事件发生时,就会调用对应的事件方法。即(implements ActionListener),而对应的当实现方法是就要求其提供事件动作。

instance 2:

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

public class Monitor2 {
	public static void main(String[] args) {
		Frame f1 = new Frame();
		Button b1 = new Button("Start ");
		Button b2 = new Button("Stop ");
		b1.setActionCommand("The End");
		f1.add(b1,BorderLayout.CENTER);
		f1.add(b2,BorderLayout.SOUTH);
		MyMonitor1 bh = new MyMonitor1();
		b1.addActionListener(bh);
		b2.addActionListener(bh);
		f1.setBounds(100, 100, 300, 300);
		f1.setVisible(true);
	}

}

class MyMonitor1 implements ActionListener{
	public void actionPerformed(ActionEvent e) {
		System.out.println("aAH you get it " + e.getActionCommand());
	}
}


注:当一个监听器监听多个button对象时,我们可以用setActionCommand进行区别,这个相当于是一个属性亦或是一种标记。

TextField(文本输入监听)

instance 3;

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

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

}

class TFFrame{
	TFFrame(){
		Frame f = new Frame("TF");
		TextField tf = new TextField();
		
		f.add(tf);
		tf.addActionListener(new TFFrameMonitor());
		f.setBounds(100, 100, 300, 300);
		f.setVisible(true);
		
	}
}

/*

class TFFrame extends Frame{
	TFFrame(){
//		Frame f = new Frame("TF");
		TextField tf = new TextField();
		
		add(tf);
		tf.addActionListener(new TFFrameMonitor());
//		f.setBounds(100, 100, 300, 300);
		setBounds(100, 100, 300, 300);
		setVisible(true);
		
	}
}

*/

class TFFrameMonitor implements ActionListener{
	public void actionPerformed(ActionEvent e) {
		TextField text = (TextField)e.getSource();
		System.out.println(text.getText());
//		text.setText(null);
	}
}

TextField属于一种输入文本类的组件,对于Frame类其一种可以直接用Frame构造方法构造,直接产生一个Frame的对象,另一种可以直接继承Frame这样就相当于已经存在了一个Frame类,可以直接使用Frame里面的方法。

注:其上面的setText(null)是相当于在输入结束按回车键的时候,会自动的把输入框里的数据清空。如果没有,其还会继续存在。

instance 4:

import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

}


class TFFrame2 extends Frame{
	TFFrame2(){
		
		TextField tf = new TextField();
		
		add(tf);
		tf.addActionListener(new TFFrameMonitor2());
		tf.setEchoChar('*');
		setBounds(100, 100, 300, 300);
		setVisible(true);
		
	}
}



class TFFrameMonitor2 implements ActionListener{
	public void actionPerformed(ActionEvent e) {
		TextField text = (TextField)e.getSource();
		System.out.println(text.getText());
		text.setText(null);
	}
}


仅仅是对Text Filed对象添加了一个setEchoChar,表示输入后的表面显示。如果没有,即为输入什么就显示什么,如果添加了就和输密码一样被覆盖了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值