Как скрыть заполнитель JBTextField, когда пользователь начинает печатать

Я новичок в разработке плагинов для IntelliJ.

Я использую JBTextField в качестве ввода текста, поэтому я могу установить текст-заполнитель с помощью метода JBTextField.getEmptyText().setText(...).

Но согласно Руководство по пользовательскому интерфейсу платформы IntelliJ там написано:

Hide the placeholder when the user starts typing, not when the input field gets the focus.

это не так, как само текстовое поле. Он скрывает заполнитель, когда получает фокус.

Вопрос в том, как я могу изменить это поведение, чтобы заполнитель исчезал, когда пользователь что-то вводит (например, что-то вроде всплывающего окна «Новый класс» в собственной среде IDE).

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение, основанное на этом отвечать от Yann Cebron.

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()
);

Другие вопросы по теме