JTextField 添加Placeholder

发布时间:2022-11-05 23:16:31

在没有 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;
	}
}

Card image cap
APP STORE
Card image cap
应用宝
Card image cap
小米
Card image cap
华为