jComboboxをMySQLテーブルと同期させる

NetBeans GUI Designerを使用してデータベースアプリケーションを作成しました。

GUI with Comboboxes (Bound to MySQL databasetables user and team): Combobox1 & 2 to select a user and/or a team

on Button new -> jDialog - executes a query to store a new user in database: jDialog with textfield, save and cancel

問題:Comboboxはプログラム開始時に更新されますが、プログラムの実行中は更新されません。

質問:新しいユーザーまたはチームが保存されたときに、自分のコンボボックスのエントリを直接更新することはできますか?そして、私はこれをどのように実装できますか?

編集:ここでは、 JDialog saveButton をクリックしたときの動作を示します。

int k=st.executeUpdate(
    "INSERT INTO User (username) " + " VALUES ('"+ name + "')");
//Here I'd like to update the jComboBox1 directly if possible
Outerclass.jComboBox1...; 
JOptionPane.showMessageDialog(null, "User is successfully saved");' 
2

2 答え

コンポーネントの ComboBoxModel をクリックします。これが役に立たない場合は、問題を示す sscce を提供してください。

補遺: JComboBox への参照が与えられると、

private final JComboBox combo = new JComboBox();

下記のようにモデルを更新することができます。この例では、 name をリストの先頭に追加しますが、 SortedComboBoxModel は魅力的な選択肢です。

DefaultComboBoxModel model = (DefaultComboBoxModel) combo.getModel();
model.insertElementAt(name, 0);

補遺:もっと簡単に言えば、 combo 自体で利用可能なメソッドを使用します。

combo.insertElementAt(name, 0);
4
追加された
データベースを更新するクラスは、comboBoxを更新できるように、comboBoxへの参照を必要とします。または、データベースを更新するクラスは、データベースが更新されたことを示すイベントを発生させる必要があり、comboBoxへの参照を持つクラスはこのイベントを待機する必要があります。
追加された 著者 camickr,
@ user1036529:コードを読みやすくするために、質問を更新してください。
追加された 著者 trashgod,
型キャストの必要はありません - コンボ自体にapiを使用する場合は:-)
追加された 著者 kleopatra,
jDialogでsavebuttonをクリックしたときの動作を次に示します。 'int k = st.executeUpdate( "INSERT INTO User(username)" + "VALUES('" + name + "')))' //ここでは、他のクラスにあるjComboBox1を更新したいと思います。 'Oterclass.jComboBox1(ここで私はコンボボックスを直接更新したいですか??);' 'JOptionPane.showMessageDialog(null、 "ユーザーは正常に保存されました");
追加された 著者 user1036529,
DefaultComboBoxModel model =(DefaultComboBoxModel)combo.getModel();コンボボックスがバインドされていない場合にのみ機能するmodel.insertElementAt(name、0); 私の場合、コンボはテーブルユーザーからのユーザーリストにバインドされています。すぐにコンボックスをバインドすると、もう動作しません。
追加された 著者 user1036529,

私は同様の問題に遭遇しました。データベースに何かを入力するとJComboBoxに反映されるはずですが、そのコンボボックスの値を変更することはできません。 JComboBoxに「オンザフライ」で直接追加することができればすばらしいことですが、そのデータを取得し、そこから新しいComboBoxModelを作成し、JComboBoxをその新しいモデルに設定する必要があります。

ここでは、DefaultComboBoxModelを使用します。これは、オブジェクトの配列(通常は文字列)またはベクトルのいずれかを取ることができます。ベクタを使用して基礎となるデータモデルを表現すると、ベクトルが動的なデータ構造であるため、それはずっと簡単です。

私のコード:

Vector s = new Vector();
try {
   //I'm using prepared statements, get the ResultSet however you like
    ResultSet rs = myPreparedStatement.executeQuery(); 
    while ( rs.next() ) {
       //Change "1" to whatever column holds your data
        s.add(rs.getString(1)); 
    }
} catch (SQLException ex) {
    ex.printStackTrace();//or whatever
}
DefaultComboBoxModel jcbModel = new DefaultComboBoxModel(s);
jcb.setModel(jcbModel);

編集:ResultSetの列は0インデックスではなく1インデックスであることに注意してください。毎回私を取得します。

1
追加された
私は、ベクトルを使用することは今日安全だとは思わない...
追加された 著者 gumuruh,
コンボボックスの値を変更することはできません - それは間違っています。
追加された 著者 kleopatra,