Я новичок в разработке плагинов для IntelliJ.
Я использую JBTextField
в качестве ввода текста, поэтому я могу установить текст-заполнитель с помощью метода JBTextField.getEmptyText().setText(...)
.
Но согласно Руководство по пользовательскому интерфейсу платформы IntelliJ там написано:
Hide the placeholder when the user starts typing, not when the input field gets the focus.
это не так, как само текстовое поле. Он скрывает заполнитель, когда получает фокус.
Вопрос в том, как я могу изменить это поведение, чтобы заполнитель исчезал, когда пользователь что-то вводит (например, что-то вроде всплывающего окна «Новый класс» в собственной среде IDE).
Я нашел решение, основанное на этом отвечать от Yann Cebron.
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()
);