2016-04-20 12 views
2

JComboBoxアイテムをクリックしてデータベースからデータを取り出して更新するときに、データベースに接続されているアイテムを反復しようとしています。しかし、そのような場合に重複値を追加する。私はJComboBoxに追加されたそれぞれのアイテムを反復して検証しようとしていますが、既存のアイテムがアイテムに似ている場合は、追加しようとしています。JComboBoxを反復処理してアイテムを検証する方法

しかし、最初にこのエラーを回避するためにNullポインタエラーが発生しました.を追加しましたが、アイテムが追加されて更新したい場合、エラーが発生します。

comboBox.addMouseListener(
      new MouseAdapter() { 
       @Override 
       public void mouseClicked(MouseEvent ev) { 
        List<Guest> list = null; 
        list = database.readGuest(); 
        int n = list.size(); 

        if(n <= 0) { 
         JOptionPane.showMessageDialog(null, "No data found."); 
        }else { 
         for(int count = 0; count < n; count++) { 
          g = list.get(count); 
          String pass = g.getPassportNp(); 
          //String s = (String) comboBox.getItemAt(count-1); 
          //for(int i = 0; i < n; ++i) { 
           if(comboBox.getItemCount() != 0) { 
            if(comboBox.getItemAt(count-1).equals(pass)) { 
             continue; 
            }else { 
             comboBox.addItem(pass); 
            } 
           }else { 
            comboBox.addItem(pass); 
           } 
          //} 

         } 
        } 
       } 
      }); 

このため任意の解決策:

マイJComboBoxのコードは以下の通りでありますか?

+0

..リストを作成して、それにすべての項目を追加しましたか? – MadProgrammer

答えて

1

コンボボックス内の項目を繰り返し処理するのではなく、その中の最後の項目と比較するだけです。基本的なデザインは2つのネストされたfor-loopsでなければなりません.1つはデータベース項目を調べるためのもので、もう1つはコンボボックス項目を使って現在のデータベース項目が既にそこにあるかどうかを調べるものです。 (ネストされたループではなく、より鮮明で短くなる代わりにList.containsを使用することもできます)。

サイドノート:コンボボックスにmouselistenerを登録することは、このタイプの作業のデザインのような感じです。データベースからアイテムを取得することは、EDTで行うのではなく、バックグラウンドスレッドで行うことです。また、最初に何が起こるのかわからない:コンボボックスを開く/アニメーションする(Swingによって行われる)、またはその内容を変更する?それは制御の流れを考えるのが難しく、別のアプローチを取るもう一つの理由です。

0

ここで私はそれを理解した解決策です。私は他人を助けて欲しい。

私は中間かなどの設定を使用することについて、データベースが重複を返さないことを確認する方法

int size = pass.size(); 
if(comboBox.getItemCount() != 0) { 

    comboBox.removeAllItems(); 
    for(int c = 0; c < size; ++c) { 
     comboBox.addItem(pass.get(c)); 
     } 
}else { 
    for(int c = 0; c < size; ++c) { 
     comboBox.addItem(pass.get(c)); 
    } 
} 
関連する問題