感謝大佬: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); //設置可見
}
}