java如何监视焦点
监视焦点的方法
在Java中,可以通过FocusListener接口来监视组件的焦点变化。该接口包含两个方法:focusGained和focusLost,分别在组件获得焦点和失去焦点时触发。
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JTextField;
public class FocusMonitorExample {
public static void main(String[] args) {
JTextField textField = new JTextField(20);
textField.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("TextField gained focus");
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("TextField lost focus");
}
});
}
}
使用适配器简化代码
如果只需要监听部分焦点事件,可以使用FocusAdapter类,它实现了FocusListener接口的空方法,避免强制实现所有方法。
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import javax.swing.JTextField;
public class FocusAdapterExample {
public static void main(String[] args) {
JTextField textField = new JTextField(20);
textField.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
System.out.println("TextField gained focus");
}
});
}
}
全局焦点监视
如果需要监视应用程序中所有组件的焦点变化,可以使用KeyboardFocusManager类。
import java.awt.KeyboardFocusManager;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
public class GlobalFocusMonitor {
public static void main(String[] args) {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener(
"focusOwner", e -> {
System.out.println("Focus changed to: " + e.getNewValue());
}
);
}
}
监听焦点事件的应用场景
焦点监听常用于表单验证、用户输入提示或动态UI更新。例如,在文本框获得焦点时显示提示信息,失去焦点时验证输入内容。

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
public class FormValidationExample {
public static void main(String[] args) {
JTextField emailField = new JTextField(20);
emailField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
String email = emailField.getText();
if (!email.contains("@")) {
JOptionPane.showMessageDialog(null, "Invalid email format");
}
}
});
}
}






