在没有 Placeholder下的JTextField,就需要添加JLabel,这样就增加了布局的工作量,但如果纯使用 Placeholder,如果在编辑时有数据的话 就很难区分 数据代表的字段。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JTextField;
import javax.swing.text.Document;
/**
* @Description:
* @date 2022年11月4日
* @version V1.0
*/
@SuppressWarnings("serial")
public class PlaceholderTextField extends JTextField {
private String placeholder;
public PlaceholderTextField() {
}
public PlaceholderTextField(final Document pDoc, final String pText, final int pColumns) {
super(pDoc, pText, pColumns);
}
public PlaceholderTextField(final int pColumns) {
super(pColumns);
}
public PlaceholderTextField(final String pText) {
super(pText);
}
public PlaceholderTextField(final String pText, final int pColumns) {
super(pText, pColumns);
}
public String getPlaceholder() {
return placeholder;
}
@Override
protected void paintComponent(final Graphics pG) {
super.paintComponent(pG);
if (placeholder == null || placeholder.length() == 0 || getText().length() > 0) {
return;
}
final Graphics2D g = (Graphics2D) pG;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(getDisabledTextColor());
g.drawString(placeholder, getInsets().left, pG.getFontMetrics().getMaxAscent() + getInsets().top);
}
public void setPlaceholder(final String s) {
placeholder = s;
}
}