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


感謝大佬:https://blog.csdn.net/weixin_44512194/article/details/93377551

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

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

現在通過一個小程序具體體會焦點監聽器的用法。

分步驟代碼如下:

要導入的類:

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;  //創建監聽類時要實現的接口

創建窗口,面板,文本框,及標簽。

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接口的監聽類,我使用第三種方法,使用一般的命名內部類實現。

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

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

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 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);   //設置可見
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM