感谢大佬: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); //设置可见 } }