2016-07-11 13 views
0

Я хочу, чтобы JTextField появлялся, когда пользователь выбирал «Extra» в списке JComboBox и скрывал в противном случае. Но JTextField не появляется, когда пользователь выбирает «Экстра», но появляется, если я сжимаю окно и увеличиваю его снова. После этого он работает правильно, только в первый раз он не появляется. Почему он так себя ведет? любое решение для этого?JTextField с JComboBox не работает должным образом

Вот мой код:

getCmbJtocsv_C_8().addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
    { 

     input3 = (String)adaptor.getCmbJtocsv_C_8().getSelectedItem(); 
     adaptor.getTxtJtocsv_C_8().setVisible(false); 

     if(input3.equals("extra")){ 
      adaptor.getTxtJtocsv_C_8().setVisible(true); 
     } 
} 

я изменил сравнение строк и я все еще получаю тот же результат.

+0

это ваша проблема. вход3 == «экстра». Вам нужно научиться сравнивать объекты (String) – Stultuske

+0

, и я попытался input3.equals («extra») тоже, все равно получив тот же результат. – mariz

+1

Возможной причиной может быть менеджер компоновки, который вы используете. полный код или исполняемый фрагмент кода могут быть полезны для четкого решения проблемы. – mfidan

ответ

1

По умолчанию компоненты Swing имеют размер (0, 0). Размер/расположение компонента определяется менеджером компоновки, когда кадр упаковывается или становится видимым.

Таким образом, я бы предположил, что, поскольку вы начинаете с невидимого текстового поля, размер его родительской панели не включает текстовое поле. Когда вы изменяете размер кадра, появляется текстовое поле, потому что его размер и размер панели пересчитываются.

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

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

+0

yup, вот в чем проблема. Теперь я изменил макет на макет карты, на первой карте панель будет пуста, а на второй карте будет текстовое поле. Тогда я покажу нужную карту. теперь код работает отлично, спасибо ... – mariz

+0

@mariz, 'я изменил макет на макет карты' - Всегда хорошая идея, чтобы менеджер макета выполнял работу. – camickr

 Смежные вопросы

  • Нет связанных вопросов^_^