0

内部フレームがありますが、内部フレームがアクティブになるたびに、ドロップダウン リストでコンボ ボックスの値が重複します。これを防ぐには??

実際、私の問題は、他の内部フレームがアクティブになると、コンボボックスが複製を開始することです

private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) {   

try
  {
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     Connection con= DriverManager.getConnection("jdbc:odbc:ref","sa","niit@123");
     Statement st1=con.createStatement();
     ResultSet rs1=st1.executeQuery("select opid from patient");
     while(rs1.next())
     {
        opid_combo.addItem(rs1.getString(1));
     }}

     catch(Exception e)
     {
        System.out.println(e);
     }
4

2 に答える 2

2

私の問題は、他の内部フレームがアクティブ化されると、コンボボックスが複製を開始することです

internalFrameActivatedイベントでデータをロードしないでください。代わりにinternalFrameOpenedイベントを使用してください。これは最初にのみ実行する必要があります。

于 2013-03-07T03:29:48.453 に答える
2

それらをリロードする前に、コンボボックスの値をクリアする必要があります...

private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
    // Remove items first
    opid_combo.removeAllItems()
    try
    {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection con= DriverManager.getConnection("jdbc:odbc:ref","sa","niit@123");
        Statement st1=con.createStatement();
        ResultSet rs1=st1.executeQuery("select opid from patient");
        while(rs1.next())
        {
            opid_combo.addItem(rs1.getString(1));
        }
    }
    catch(Exception e)
    {
        System.out.println(e);
    }
}

ニットピック

そして、私がここにいる間。フレームがアクティブになるたびにアイテムをリロードするのは、おそらくあまり良い考えではありません。ある時点でコンボ ボックスをリロードする必要がある場合は、おそらく「更新」オプションを指定する必要があります。

また、フレームを切り替えるたびにアプリケーションが「一時停止」するため、イベント ディスパッチ スレッドのコンテキスト内でこれを行うのはあまり良い考えではありません。代わりに、 a のようなものを使用SwingWorkerしてバックグラウンドで値をロードします

于 2013-03-07T02:52:14.113 に答える