java-swing-事件監聽-焦點監聽器

開始不知道焦點是啥,其實就是打字的時候,這個一閃一閃的豎線。java

與焦點事件監聽器有關的信息:
事件名稱:FocusEvent。
事件監聽接口: FocusListener。
須要實現它的兩個方法,分別是
**focusGained(FocusEvent arg0)**方法
**focusLost(FocusEvent arg0)**方法
第一個方法在組件捕獲到焦點是會觸發,第二個方法在組件失去焦點時觸發
事件相關方法:addFocusListener() 添加監聽,removeFocusListener() 刪除監聽。web

如今經過一個小程序具體體會焦點監聽器的用法。小程序

分步驟代碼以下:框架

要導入的類:ide

import javax.swing.JFrame;   //頂層容器 (框架)
import javax.swing.JLabel;   //標籤
import javax.swing.JTextField;  //文本框,本列爲其添加焦點事件監聽器
import javax.swing.JPanel; //中間容器 (嵌板)最經常使用的面板
import java.awt.event.FocusEvent;    //焦點事件
import java.awt.event.FocusListener;  //建立監聽類時要實現的接口

建立窗口,面板,文本框,及標籤。svg

JFrame jframe = new JFrame("動做監聽");  //窗口
JPanel jpanel1 = new JPanel();  //面板
JLabel jlabel1 = new JLabel();  //三個標籤,1用於事件觸發顯示內容
JLabel jlabel2 = new JLabel("普通文本框");  //標籤
JLabel jlabel3 = new JLabel("添加了焦點監聽器的文本框");  //標籤
JTextField jtextfield1 = new JTextField("",15); //普通文本框
JTextField jtextfield2 = new JTextField("",15); //要添加焦點監聽器的文本框

下面是重點,編寫實現FocusListener接口的監聽類,我使用第三種方法,使用通常的命名內部類實現。spa

class myFocusListener implements FocusListener
        {
            @Override
            public void focusGained(FocusEvent arg0)
            {
                // 獲取焦點時執行此方法
            	jlabel1.setText("文本框得到焦點,正在輸入內容");
            }
            @Override
            public void focusLost(FocusEvent arg0)
            {
                // 失去焦點時執行此方法
            	jlabel1.setText("文本框失去焦點,內容輸入完成");
            }
        }

讓文本框jlabel3添加焦點監聽器code

jtextfield2.addFocusListener(new myFocusListener());

最後添加組件的操做xml

jlabel1.setText("文本框暫未觸發事件");

jpanel1.add(jlabel1);       //將jlabel1添加到面板,先顯示未觸發狀態
jpanel1.add(jlabel2);    //顯示「普通文本框」
jpanel1.add(jtextfield1);    //添加普通文本框jtextfield1
jpanel1.add(jlabel3);    //顯示「添加了焦點監視器的文本框」
jpanel1.add(jtextfield2);    //添加有焦點監視器的文本框jtextfield2
jframe.add(jpanel1);    //面板添加入窗口

運行結果:
在這裏插入圖片描述
完整的源代碼:blog

JFrame jframe = new JFrame("動做監聽");  //窗口
jframe.setSize(200, 200);   //設置窗口大小
JPanel jpanel1 = new JPanel();  //面板
JLabel jlabel1 = new JLabel();  //三個標籤,1用於事件觸發顯示內容
JLabel jlabel2 = new JLabel("普通文本框");  //標籤
JLabel jlabel3 = new JLabel("添加了焦點監聽器的文本框");  //標籤
JTextField jtextfield1 = new JTextField("",15); //普通文本框
JTextField jtextfield2 = new JTextField("",15); //要添加焦點監聽器的文本框
public class text_FocusListenner
{
	public static void main(String[] args) 
	{
		JFrame jframe = new JFrame("動做監聽");  //窗口
		JPanel jpanel1 = new JPanel();  //面板
		JLabel jlabel1 = new JLabel();  //三個標籤,1用於事件觸發顯示內容
		JLabel jlabel2 = new JLabel("普通文本框");  //標籤
		JLabel jlabel3 = new JLabel("添加了焦點監聽器的文本框");  //標籤
		JTextField jtextfield1 = new JTextField("",15); //普通文本框
		JTextField jtextfield2 = new JTextField("",15); //要添加焦點監聽器的文本框

		class myFocusListener implements FocusListener
        {
            @Override
            public void focusGained(FocusEvent arg0)
            {
                // 獲取焦點時執行此方法
            	jlabel1.setText("文本框得到焦點,正在輸入內容");
            }
            @Override
            public void focusLost(FocusEvent arg0)
            {
                // 失去焦點時執行此方法
            	jlabel1.setText("文本框失去焦點,內容輸入完成");
            }
        }
        //關鍵的一句話,添加監聽器
		jtextfield2.addFocusListener(new myFocusListener());
		
		jlabel1.setText("文本框還暫時未觸發事件");
		
		jpanel1.add(jlabel1);       //將jlabel1添加到面板,先顯示未觸發狀態
		jpanel1.add(jlabel2);    //顯示「普通文本框」
		jpanel1.add(jtextfield1);    //添加普通文本框jtextfield1
		jpanel1.add(jlabel3);    //顯示「添加了焦點監視器的文本框」
		jpanel1.add(jtextfield2);    //添加有焦點監視器的文本框jtextfield2
		jframe.add(jpanel1);    //面板添加入窗口
		
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設置關閉時操做
		jframe.setVisible(true);   //設置可見
	}
}