效果图

注:未输入内容时显示Hint,获取到焦点以后自动清空Hint,失去焦点且内容为空时,再次显示Hint
代码实现
import javafx.beans.value.ChangeListener;import javafx.beans.value.ObservableValue;import javafx.event.EventHandler;import javafx.scene.control.TextArea;import javafx.scene.input.KeyEvent;import javafx.scene.input.MouseEvent;public class HintTextArea extends TextArea {private String mHint = "";public HintTextArea(){super();this.setOnMouseClicked(new EventHandler<MouseEvent>() {@Overridepublic void handle(MouseEvent event) {cleanHint();}});this.setOnKeyPressed(new EventHandler<KeyEvent>() {@Overridepublic void handle(KeyEvent event) {cleanHint();}});this.focusedProperty().addListener(new ChangeListener<Boolean>() {@Overridepublic void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {if (oldValue&&!newValue&&getLength()==0&&!mHint.isEmpty()){setHint(mHint);}}});}private void cleanHint(){if (mHint.isEmpty()){return;}if (getText().equals(mHint)){clear();setStyle("-fx-text-fill: #000000");}}public void setHint(String hint){this.mHint = hint;this.setText(mHint);this.setStyle("-fx-text-fill: #008B8B");}}
