2012-04-03 10 views
0

EDIT(NEW)の値:移入コンボボックスは

それでもcboxCustomersを移入する方法を考え出したていません。私は過去1、2日間それをしてきたが運がなかった。

場合、誰でも助けることができる:http://pastebin.com/e5wibRYw

私はところで、catsからcustomersに行ってきました。

私はMr. Xymon'sアプローチを試しましたが、動作しなかったため正しく実装されませんでした。

私が人口を処理するために使用したイベントは、私が使用しようとしていたコントロール/イベントについては常にNullPointerExceptionです。

OLD:

JFormがあります。その上に、1つのコンボボックスがあります。また、猫のテーブルが1つある - 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 ANSWER:

私はそれを修正だと思います。私はちょうどSQLExceptionをキャッチする一つの大きなtry-catchステートメントに、強調表示されたコード行をまとめなければなりませんでした。問題は - コンボボックスに展開時に値が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

Hmm。私がこれを見る唯一の問題は、コンボボックスがフォームが読み込まれたときにのみ生成されることです。私のプログラムにはタブがあります。最初のタブでは、各猫のデータを表示したり、特定の猫を更新したり、新しい猫を削除したり追加したりすることができます。 2番目のタブにはコンボボックスが含まれています。つまり、フォームが読み込まれ、コンボボックスにあなたの方法で既存の猫が埋め込まれているとしましょう。さて、もし私が行って、新しい猫を作ったり、既存のものを更新したり、私のアプリケーションの最初のタブにあるものを削除するとどうなりますか?これは、データベース内のテーブルを変更します。これは、コンボボックスに古い情報が含まれることを意味します。それについて私は何ができますか? – Bob

+1

そのための救済策があります。コンボボックスを作成するためのコードを含むfetchCategory()メソッドを作成しましょう。それはコンストラクタから呼び出すのと同じメソッドです。最初に追加する必要があるのは、私の例ではlistという名前のDefaultComboBoxModelオブジェクトを使用してコンボボックスからすべての要素を削除するコードです。したがって、これはlist.removeAllElements();のようになります。最後にfetchCategory()メソッドを呼び出します。更新、削除、挿入などのすべてのカテゴリ操作を実行した後それはあなたのコンボボックスの内容を更新するはずです。 –

+0

'fetchCategoty()'については、このような意味ですか?http://pastebin.com/JHH0yLhD 'cats'と' customers'の混乱を無視してください。 – Bob

関連する問題