如何在用户开始输入时隐藏 JBTextField 占位符
How to hide JBTextField placeholder when user starts typing
我是 IntelliJ 插件开发的新手。
我使用 JBTextField
作为文本输入,因此我可以使用 JBTextField.getEmptyText().setText(...)
方法设置占位符文本。
但是根据 IntelliJ Platform UI Guidelines 它说:
Hide the placeholder when the user starts typing, not when the input field gets the focus.
这不是文本字段本身的方式。它在获得焦点时隐藏占位符。
问题是,我怎样才能改变这种行为,以便占位符在用户键入内容时消失(例如像本机 IDE 的“New Class”弹出窗口 window).
我找到了 Yann Cebron 基于这个 answer 的解决方案。
The default behavior from com.intellij.ui.components.TextComponentEmptyText#isStatusVisible
can be customized via JBTextField.STATUS_VISIBLE_FUNCTION
property which is a reference to a BooleanFunction<JTextComponent>
.
所以我们可以像这样将布尔函数引用到 STATUS_VISIBLE_FUNCTION
键:
import com.intellij.ui.components.JBTextField;
import com.intellij.ui.components.TextComponentEmptyText;
import com.intellij.util.BooleanFunction;
textField = new JBTextField();
textField.getEmptyText().setText("Placeholder...");
textField.putClientProperty(
TextComponentEmptyText.STATUS_VISIBLE_FUNCTION,
(BooleanFunction<JBTextField>) tf -> tf.getText().isEmpty()
);
我是 IntelliJ 插件开发的新手。
我使用 JBTextField
作为文本输入,因此我可以使用 JBTextField.getEmptyText().setText(...)
方法设置占位符文本。
但是根据 IntelliJ Platform UI Guidelines 它说:
Hide the placeholder when the user starts typing, not when the input field gets the focus.
这不是文本字段本身的方式。它在获得焦点时隐藏占位符。
问题是,我怎样才能改变这种行为,以便占位符在用户键入内容时消失(例如像本机 IDE 的“New Class”弹出窗口 window).
我找到了 Yann Cebron 基于这个 answer 的解决方案。
The default behavior from
com.intellij.ui.components.TextComponentEmptyText#isStatusVisible
can be customized viaJBTextField.STATUS_VISIBLE_FUNCTION
property which is a reference to aBooleanFunction<JTextComponent>
.
所以我们可以像这样将布尔函数引用到 STATUS_VISIBLE_FUNCTION
键:
import com.intellij.ui.components.JBTextField;
import com.intellij.ui.components.TextComponentEmptyText;
import com.intellij.util.BooleanFunction;
textField = new JBTextField();
textField.getEmptyText().setText("Placeholder...");
textField.putClientProperty(
TextComponentEmptyText.STATUS_VISIBLE_FUNCTION,
(BooleanFunction<JBTextField>) tf -> tf.getText().isEmpty()
);