2012-04-03 5 views
0

EDIT (새로운) 값 :채우기 콤보 상자

아직도 cboxCustomers을 채우는 방법을 알아 냈하지 않았습니다. 나는 지난 1, 2 일 동안 운 좋게 지 냈습니다.

경우 누구든지 도움이 될 수 있습니다 http://pastebin.com/e5wibRYw

내가 BTW, customerscats에서 갔다.

시도한 적이 있지만 작동하지 않아 올바르게 구현하지 못했습니다.

내가 인구를 처리하는 데 사용한 모든 이벤트는 언제든지 사용하려고 시도한 모든 컨트롤/이벤트에 대해 NullPointerException을 얻었습니다.

OLD :

JForm있다. 여기에는 하나의 콤보 상자가 있습니다. 또한 고양이 한 테이블 - cats. 각 고양이는 idcatName입니다.

내가하고 싶은 것은 콤보 박스를 클릭했을 때 확대하여 cats에있는 고양이의 id을 모두 채 웁니다.

SLOVED. 아래 Asnwer. 는 불행하게도 나는 >로 표시 한 선에서 unreported exception java.sql.SQLException 수많은 나타납니다

private void cboxCatsMouseClicked(java.awt.event.MouseEvent evt) { 
     // TODO add your handling code here: 
     // create an array list to be filled with cat's ids 
     ArrayList<String> cats = new ArrayList<String>(); 
     String query = "SELECT id FROM cats ORDER BY id"; 
     >java.sql.PreparedStatement stm = connection.prepareStatement(query); 

     >ResultSet rs = stm.executeQuery(query); 

     >while(rs.next()){ 
      >String cat = rs.getString("id"); 
      // add cat's ids tp the array list 
      cats.add(cat); 
     } 

     >rs.close(); 

     // populate the combo box 
     DefaultComboBoxModel model = new DefaultComboBoxModel(cats.toArray()); 
     cboxCats.setModel(model); 
    } 

OLD 답변 :

내가 그것을 고정 생각합니다. 나는 강조 표시된 모든 줄을 하나의 커다란 try-catch 문으로 묶어서 SQLException을 잡아야했습니다. 문제가 있습니다 - 콤보 상자를 펼치면 콤보 상자에 값이 id으로 채워지지 않습니다. 왜 그런가요? 잘못된 이벤트를 사용하고 있습니까?

+1

전체 예외 텍스트를 게시하십시오. 또한 SwingWorker 객체가 제공하는 것과 같은 백그라운드 스레드에서 데이터베이스 쿼리를 수행하고자 할 것입니다. –

+2

편집에 관해서 : 다시 말하지만, 백그라운드 스레드에서 모든 데이터베이스 쿼리를 수행해야합니다. mouseClick에서 콤보 박스를 채우려 고하는 이유는 무엇입니까? 데이터베이스를 쿼리하는 데 시간이 걸릴 것이고, 스윙의 콤보 상자 열기 기능이 엉망이 될 것입니다. 콤보 박스를 미리 채우지 않으시겠습니까? –

+0

예. 그것은 더 의미가 있습니다. 감사. – Bob

답변

2

ID 대신 고양이 이름으로 콤보 상자를 채우는 것이 좋지 않습니까? ArrayList를 사용하는 대신 필드 값을 모델에 직접 추가하여 다른 해결책을 찾았습니다. 양식을로드 할 때 콤보 상자를 채우려면 생성자 내에서이 작업을 수행해야합니다.

DefaultComboBoxModel list = new DefaultComboBoxModel(); 
JComboBox cbo_cats = new JComboBox(list); 


// at constructor or a user-defined method that's called from constructor 
    try{  
     // assume that all objects were all properly defined 
     s = con.createStatement(); 
     s.executeQuery("SELECT * FROM cats ORDER BY catName"); 
     rs = s.getResultSet(); 
     while(rs.next()){ 
     //int id = rs.getInt("id"); 
     //list.addElement(id); 

     String c = rs.getString("catName"); 
     list.addElement(c); 
     } 
    }catch(Exception err){ 
     System.out.println(err); 
    } 

나는 알 수 있듯이 준비된 문을 사용하지 않았지만 쉽게 변경할 수 있습니다.

+0

흠. 유일한 문제는 폼이로드 될 때만 콤보 상자가 채워진다는 것입니다. 내 프로그램에 탭이 있다는 건.따라서 첫 번째 탭을 통해 사용자는 각 고양이에 대한 데이터를보고, 특정 고양이를 업데이트하고, 새 고양이를 제거하고 추가 할 수 있습니다. 두 번째 탭에는 콤보 상자가 있습니다. 따라서 폼을로드하고 자신의 길을 사용하여 이미 존재하는 고양이로 콤보 상자를 채우라고 가정 해 봅시다. 자, 가서 새 고양이를 만들거나, 기존의 것을 업데이트하거나, 내 응용 프로그램의 첫 번째 탭에서 새 고양이를 삭제하면 어떨까요? 그러면 콤보 상자에 오래된 정보가 포함된다는 의미의 데이터베이스 테이블이 변경됩니다. 그것에 대해 무엇을 할 수 있습니까? – Bob

+1

거기에 대한 구제 수단이 있습니다. 콤보 상자를 채우는 코드가 들어있는 fetchCategory()라고하는 메소드를 만듭니다. 이것은 생성자에서 호출하는 것과 동일한 메소드입니다. 처음에 추가해야하는 것은 DefaultComboBoxModel 객체를 사용하여 콤보 상자에서 모든 요소를 ​​제거하는 코드입니다.이 예제에서는 필자가 list라는 이름을 사용했습니다. 그래서 이렇게 될 것입니다. list.removeAllElements(); 마지막으로 fetchCategory() 메서드를 호출하면됩니다. 업데이트, 삭제, 삽입과 같은 모든 범주 작업을 수행 한 후 그게 당신의 콤보 상자의 내용을 업데이 트해야합니다. –

+0

'fetchCategoty()'에 대해서는 다음과 같은 의미입니까? http://pastebin.com/JHH0yLhD'cats'와'customers' 사이의 혼동을 무시하십시오 – Bob

관련 문제