Как мне заставить InputVerifier работать с редактируемым JComboBox - PullRequest
3 голосов
/ 10 сентября 2008

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

Метод проверки никогда не вызывается.
Тот же верификатор вызывается на JTextField штраф.

Что я могу делать не так?

Ответы [ 2 ]

8 голосов
/ 10 сентября 2008

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

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

JComboBox combo = new JComboBox();
JTextField tf = (JTextField)(combo.getEditor().getEditorComponent());
tf.setInputVerifier(verifyer);
1 голос
/ 10 сентября 2008

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

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 является составным компонентом. Я бы рекомендовал избегать таких неприятных решений для пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...