2014-10-14 14 views
0

У меня проблема, вместо замены элементов в combobox2, это стеки. Я попытался поместить bookss.removeAllItems(); поверх bookss.addItem (имена); но я получаю сообщение об ошибке, когда я нажимаю на другие элементы в combobox1.Заполнение ComboBox с помощью ComboBox

вот мой код

String caa = categorys.getSelectedItem().toString(); 
if ("Fiction".equals(caa)) 
{ 
    String acct = categorys.getSelectedItem().toString(); 
    try{ 
     pst = con.prepareStatement("select * from books where category=?"); 
     pst.setString(1, acct); 
     ResultSet rsf = pst.executeQuery(); 
     rsf.next(); 
     try{ 
      rsf = stmt.executeQuery("select * from BOOKS WHERE category='Fiction'"); 
      while(rsf.next()) 
      { 
       String names = rsf.getString("book_title"); 
       bookss.addItem(names); 
      } 
      }catch(SQLException err){ 
      System.out.println(err); 
     } 
     }catch(SQLException e){ 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 
if ("Horror".equals(caa)) 
{ 
    String acct = categorys.getSelectedItem().toString(); 
    try{ 
     pst = con.prepareStatement("select * from books where category=?"); 
     pst.setString(1, acct); 
     ResultSet tts = pst.executeQuery(); 
     tts.next(); 
     try{ 
      tts = stmt.executeQuery("select * from BOOKS WHERE category='Horror'"); 
      while(tts.next()) 
      { 
       String names = tts.getString("book_title"); 
       bookss.addItem(names); 
      } 
      }catch(SQLException err){ 
      System.out.println(err); 
     } 
     }catch(SQLException e){ 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 
+0

ли вы назвать 'REVALIDATE()' после удаления и повторного добавления компонентов? Когда вы добавляете компоненты в уже видимый контейнер, это считается недопустимым (doc для ['invalidate()'] (http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html# invalidate())): * Неверная маркировка контейнера указывает, что контейнер необходимо выложить. Этот метод называется автоматически при изменении любой информации, связанной с компоновкой (например, установка границ компонента или добавление компонента в контейнер) *. Поскольку вы добавляете новые компоненты в контейнер (ваш JComboBox), вам нужно пересмотреть –

+0

. Я не знаю, что произошло, но теперь оно работает – DOODpls

+0

Без чего-либо? Похоже на ошибку с жестким воспроизведением; знак того, что вы неправильно размещаете свой код Swing в [Event Dispatch Thread] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html): «* Некоторые методы компонента Swing помечены «thread safe» в спецификации API, их можно безопасно вызывать из любого потока. Все остальные методы Swing-компонента должны быть вызваны из потока отправки событий. Программы, которые игнорируют это правило, могут работать правильно большую часть времени, но подвержены непредсказуемым ошибки, которые трудно воспроизвести. * " –

ответ

0

Используйте это:

DefaultComboBoxModel model = (DefaultComboBoxModel) ComboBox.getModel(); 
model.removeAllElements(); 
Смежные вопросы