2013-03-21 2 views
-1

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

String ch = text.getText(); 
if (ch.equals("")) { 
    combo.setVisible(false);    
} else {     
    try {     
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/userlogin", "root","12345"); 
     Statement st = connect.createStatement(); 
     ResultSet rs = st.executeQuery("SELECT author_name FROM scrpd_authors WHERE author_name LIKE '"+ ch + "%'"); 

     while (rs.next()) { 
      String name = rs.getString("author_name"); 
      if (name.equals("")) { 
       searchitems.addItem(""); 
      } else { 
       searchitems.addItem(rs.getString("author_name")); 
       searchitems.setVisible(true);        
      }       
     } 
     connect.close(); 
    } catch (Exception ex) { 
    } 
} 

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

+0

Что именно следует выбрать? Вы можете использовать прослушиватель, а затем отменить первую запись после заполнения списка. –

+0

Убедитесь, что первый элемент является пустым 'String'. – tmwanik

+0

Почему это проблема? Лучший случай, когда пользователь уже выбрал правильный вариант, в худшем случае ему нужно спуститься вниз, чтобы выбрать правильный, что он должен делать и в вашем подходе. –

ответ

2

автоматически выбирается первое имя в списке. Как избежать этой проблемы?

Затем с помощью:

comboBox.setSelectedIndex(-1); 

после загрузки данных.

Возможно, вы можете использовать Combo Box Prompt.

2

это причуда не редактируемой JComboBox при добавлении в пустое поле:

  • с помощью addItem(item) будет выбрать этот элемент
  • с помощью insertItemAt(item, 0) не выбрать этот пункт

That причуду независимо от того, происходит ли заполнение на модели или на дисплее.

Так что, если отменить выбор после заполнения модель (как это было предложено Робом) не вариант, вы можете использовать метод вставки (либо на представлении или на модели):

// model 
model.addElementAt(item, model.getSizes(); 
// alternatively view 
combo.insertItemAt(item, combo.getItemCount()); 

Как правило, это рекомендуется делать модели манипуляции на модели (vs. на методах обложки на представлении) - таким образом вы можете реализовать и протестировать вашу обработку модели независимо от представления.

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