Java:FocusListener接口

有了ActionListener事件监听器,就一定要有FocusListener焦点事件监听器。

FocusListener接口所在包

FocusListener接口在event包中,即在开头引入该包。

import java.awt.event.*;

FocusListener接口使用方法

先说一下什么叫焦点监听器。焦点监听器其实就是可以监听组件是否为当前焦点的一个监听器。

举个例子方便理解,比如我们本来在编写一个文本框1,之后突然想去编写另一个文本框2,我们就会去点击文本框2,那么原来的文本框1就失去了焦点,而相对应的文本框2就获得了焦点,而这个焦点监听器就是用来监听我们什么时候把焦点移到这个文本框或者移开这个文本框。

那么有人可能会问这个跟ActionListener事件监听器有什么区别,还以这个例子来说,如果我们点击这个文本框他就会触发一个事件,相应的移开焦点会触发另一个事件,而事件监听器只有当你在编写该文本框时按下回车键才会触发相应的事件。

接下来,我们就可以真正开始学习该FocusListener接口了。该接口只用实现两个方法分别叫做focusGained(FocusEvent arg0)和focusLost(FocusEvent arg0)。这两个方法看名字大概就可以明白意思了,第一个Gained方法就是在组件获得焦点时执行的程序,那对应的第二个Lost方法就是在组件失去焦点时执行的程序了。

class TextListener/*这里可以更改类名*/ implements FocusListener {
	public void focusGained(FocusEvent arg0) {
		/*得到焦点时执行得内容*/
	}

	public void focusLost(FocusEvent arg0) {
		/*失去焦点时执行得内容*/
	}
}

但如果只写这一个TextListener类我们发现是无法使用的。呵呵,你还没有添加这个对象呢。记得要给文本框添加一个TextListener的对象,即写如下代码。

TextListener text_listener = new TextListener();
text_field.addFocusListener(text_listener);

接下来如果你又想移除该对象了,就直接remove掉就行了。

text_field.removeFocusListener(text_listener);

最后再唠叨一句,记住焦点监听器不仅仅可以去监听文本框,对于其他组件如密码框、文本域等组件也是适用的。

代码

package technology;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFirstFocusListener extends JFrame {
	static final long serialVersionUID = 1L;
	Container container = getContentPane();
	JPanel panel_north = new JPanel(), panel_center = new JPanel();
	JTextField text_field1 = new JTextField(10), text_field2 = new JTextField(10);
	JLabel label = new JLabel();
	
	class TextListener implements FocusListener {
		public void focusGained(FocusEvent arg0) {
			label.setText("文本框1获得焦点");
		}
		
		public void focusLost(FocusEvent arg0) {
			label.setText("文本框1失去焦点");
		}
	}
	
	MyFirstFocusListener() {
		super("JFrame窗体");
		this.setBounds(200, 50, 200, 200);
		text_field1.addFocusListener(new TextListener());
		
		panel_north.add(label);
		panel_center.add(text_field1);
		panel_center.add(text_field2);
		container.setLayout(new BorderLayout());
		container.add(panel_north, BorderLayout.NORTH);
		container.add(panel_center, BorderLayout.CENTER);
		this.setVisible(true);
	}
	
	public static void main(String args[]) {
		new MyFirstFocusListener();
	}
}

效果图如下:

在这里插入图片描述

posted @ 2020-03-23 14:32  000紫外线000  阅读(1154)  评论(0编辑  收藏  举报