Java — разрешить использование возврата в редактируемом JComboBox с Substance L&F

Я использую Substance L&F, и я установил JComboBox для редактирования, чтобы я мог выбрать нужное значение из его всплывающего окна или ввести новое значение в его редакторе.

Ввод нового значения работает нормально, но если я хочу удалить пропущенную букву из редактора Combo и нажимаю Backspace, чтобы сделать это, он выбирает буквы в редакторе, а не стирает их. Вот скриншот:

введите здесь описание изображения

Я хочу, чтобы редактор Combo работал как JTextField при наборе букв клавиатуры или Backspace или Delete в нем, так есть ли способ сделать это? Или чем это вызвано?


person Brad    schedule 30.06.2013    source источник
comment
Опубликуйте SSCCE, чтобы быстрее получить помощь.   -  person David Kroukamp    schedule 30.06.2013


Ответы (2)


См. ниже важность SSCCE. Не все, что идет не так, является ошибкой, в большинстве случаев это что-то не так в вашем фактический код, без которого без SSCCE мы не мудрее.

Кажется, у меня отлично работает:

На старте:

введите здесь описание изображения

После выбора JComboBox и нажатия Backspace:

введите здесь описание изображения

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Test {

    public Test() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


                JComboBox jc = new JComboBox(new String[]{"Hello", "Bye", "World", "Cruel"});
                jc.setEditable(true);
                frame.add(jc);

                frame.pack();
                frame.setVisible(true);

            }
        });
    }

    public static void main(String[] args) {
        new Test();
    }
}

ОБНОВЛЕНИЕ

Согласно вашему комментарию:

Я не думал, что это будет работать нормально! ... Это проблема в Субстанции; L&F я использую.

Подробнее об ошибке см. ниже:

Вещество: редактируемый JComboBox не поддерживает клавишу возврата

Как указано:

Такое поведение является особенностью. Это «чувственная» часть Substance, которая добавляет автозаполнение в редактируемые поля со списком.

В качестве альтернативы см. мой ответ здесь для получения дополнительных L & Fs и/ или способ сделать свой

ОБНОВЛЕНИЕ 2:

Благодаря @Brad (за расшифровку журнала ошибок, который я связал с Substance: P), чтобы исправить это, просто выполните:

UIManager.put( LafWidget.COMBO_BOX_NO_AUTOCOMPLETION, Boolean.TRUE ); 
person David Kroukamp    schedule 30.06.2013
comment
@mKorbel +1 Я тоже так думаю, похоже, что OP пытается выполнить автозаполнение, но без SSCCE мы сидим в неведении :(. - person David Kroukamp; 30.06.2013
comment
@ Дэвид .. Я не думал, что это сработает! ... Это проблема в Субстанции; L&F я использую. - person Brad; 30.06.2013
comment
@ Дэвид .. Большое спасибо. Это исправляет это: UIManager.put( LafWidget.COMBO_BOX_NO_AUTOCOMPLETION, Boolean.TRUE ); - person Brad; 30.06.2013
comment
@Brad +1 рад, что у вас все заработало, я видел комментарий к COMBO_BOX_NO_AUTOCOMPLETION, но не был уверен, где вы его примените, поэтому я оставил вам разбираться. Хорошая работа :) Обновил мой ответ для полноты картины. - person David Kroukamp; 30.06.2013
comment
Я просто не понимаю, почему ребята здесь ставят -1 к моему вопросу :) ... Это правильный вопрос с проблемой, которая существует в теме Substance, и благодаря Дэвиду мы нашли решение для ее преодоления! - person Brad; 30.06.2013
comment
@Brad +1 от меня ... Я думаю, в основном из-за отсутствия SSCCE, но я думаю, что 1 или 2 могут не знать его также о веществе L&F. Добавьте это к своему вопросу/заголовку, поскольку это имеет отношение к этому вопросу/проблеме. (Я сделал это для вас, конечно, вы можете отредактировать снова, если это необходимо) - person David Kroukamp; 30.06.2013

UIManager.put(LafWidget.COMBO_BOX_NO_AUTOCOMPLETION, Boolean.TRUE);

Эта работа для меня!

person Artificioo    schedule 16.03.2014