1、定义一个初始化的文本框,并添加监听事件
// 创建默认状态下的文本框
String hint = "请输入";
JTextField textField = new JTextField(hint);
textField.setPreferredSize(new Dimension(400,50));
textField.setFont(new Font("宋体",Font.BOLD,20));
textField.setForeground(Color.GRAY);// 默认灰色字体
textField.setFocusable(false);// 默认失去焦距
// 监听事件
Hint.doListener(this,textField, hint);//this为当前弹窗组件,即textField的父组件
2、建立一个监听类,实现文本框在“获取焦距”或“失去焦距”时的提示语的变化
package com.view.listener;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Hint {
public static void doListener(JDialog parent,JTextField textField,String hint){
// “按下”父组件监听
parent.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
textField.setFocusable(false);// 失去焦距
}
});
// "按下"文本框的监听
textField.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
textField.setFocusable(true);// 获取焦距
textField.requestFocusInWindow();// 确保textField获取焦距(没有该行代码,可能需要双击才可能获取焦距)
}
});
// 焦距监听
textField.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
// 获取焦距时,清空提示语,设置编辑状态
if (textField.getText().equals(hint)){
textField.setText(null);
textField.setForeground(Color.BLACK);
}
}
@Override
public void focusLost(FocusEvent e) {
// 失去焦距时,没有输入内容,恢复默认状态
if (textField.getText().isEmpty()){
textField.setText(hint);
textField.setForeground(Color.GRAY);
}
}
});
}
}
2024.07.10记