Как заставить InputVerifier работать с редактируемым JComboBox
Вопрос
у меня есть JComboBox
с обычаем inputVerifyer
установлено ограничение MaxLength, если для него установлено значение «редактируемое».
Кажется, что метод проверки никогда не вызывается.
Тот же верификатор вызывается на JTextField
отлично.
Что я могу делать неправильно?
Решение
Я нашел обходной путь.Я подумал, что сообщу об этом следующему человеку, столкнувшемуся с этой проблемой.
По сути.Вместо установки inputVerifier в ComboBox вы устанавливаете для него «Компонент редактора».
JComboBox combo = new JComboBox();
JTextField tf = (JTextField)(combo.getEditor().getEditorComponent());
tf.setInputVerifier(verifyer);
Другие советы
Покажите нам небольшой участок вашего кода.
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 является составным компонентом. Я бы посоветовал избегать таких неприятных решений пользовательского интерфейса.
Не связан с StackOverflow