Как заставить InputVerifier работать с редактируемым JComboBox

У меня есть JComboBox с настраиваемым inputVerifyer, установленным для ограничения MaxLength, когда он настроен на редактирование.

Кажется, что метод verify никогда не вызывается. Тот же проверяющий вызывается при наложении штрафа JTextField.

Что я делаю не так?

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

Ответы 2

Покажите нам небольшой фрагмент вашего кода.

package inputverifier;

import javax.swing.*;

    class Go {
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
            runEDT();
        }});
    }
    private static void runEDT() {
        new JFrame("combo thing") {{
            setLayout(new java.awt.GridLayout(2, 1));
            add(new JComboBox() {{
                setEditable(true);
                setInputVerifier(new InputVerifier() {
                    @Override public boolean verify(JComponent input) {
                        System.err.println("Hi!");
                        return true;
                    }
                });
            }});
            add(new JTextField());
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }};
    }    
}

Похоже, проблема в том, что JComboBox является составным компонентом. Я бы посоветовал избегать таких неприятных решений пользовательского интерфейса.

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

Я нашел обходной путь. Я подумал, что расскажу об этой проблеме следующему человеку.

По сути. Вместо того, чтобы устанавливать inputVerifier в ComboBox, вы устанавливаете его как «Компонент редактора».

JComboBox combo = new JComboBox();
JTextField tf = (JTextField)(combo.getEditor().getEditorComponent());
tf.setInputVerifier(verifyer);

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