2016-07-27 12 views
0

3つのコンボボックスがそれぞれ別のものに依存しているフレームを作成しています.3番目は2ndに、2番目は1stに依存しています。 問題は、最初に私がNullPointerの例外を3番目に変更したときです。これは2番目のアクションの変更アクションですからです。jCombobox NullPointer例外

私の質問は、最初のjComboBox "jComboBox0"を変更すると、3番目のjComboBox "jCombobox2"の項目変更の動作を防ぐ方法です。ここで

は私のコードです:

private void jComboBox0ItemItemStateChanged(ItemEvent event) { 
    jComboBox1.removeAllItems(); 
    ComboItem cat = (ComboItem) jComboBox0.getSelectedItem(); 


    String requete = "from Subcategory where Fk_Category = " + cat.getValue(); 

    Collection subcategories = Subcategory.getListeSubcategory(requete); 

    for (Iterator i = subcategories.iterator(); i.hasNext();) { 
     Subcategory item = new Subcategory(); 
     item = (Subcategory) i.next(); 
     System.out.println(item.getId()); 

     jComboBox1.addItem(new ComboItem(item.getNom(), (int) item.getId())); 
    } 

    // System.out.println("tbdlat a lkhra ! : "+listCategory.get(0)); 

} 

private void jComboBox1ItemItemStateChanged(ItemEvent event) { 
    // nda2 
    jComboBox2.removeAllItems(); 
    ComboItem cat = (ComboItem) jComboBox1.getSelectedItem(); 


    String requete = "from Area where fk_Subcategory = " + cat.getValue()+" group by Nom_Area"; 

    Collection areas = Area.getListeArea(requete); 

    for (Iterator i = areas.iterator(); i.hasNext();) { 
     Area item = new Area(); 
     item = (Area) i.next(); 
     System.out.println(item.getId()); 

     jComboBox2.addItem(new ComboItem(item.getNom(), (int) item.getId())); 
    } 

} 

private void jComboBox2ItemItemStateChanged(ItemEvent event) { 
    // i'll do some code here 
} 
+5

1)どのようなスタックトレースである[参照、そしてどのように私は自分のアプリケーションのエラーをデバッグするためにそれを使用することができます?](http://stackoverflow.com/q/3988788/418556)&[nullポインタの例外とは何ですか、どうすれば修正できますか?](http://stackoverflow.com/q/218384/418556)2 )より良い助けを早く得るために、[MCVE]または[短く、自己完結型、正しい例](http://www.sscce.org/)を投稿してください。 –

+0

@AndrewThompson私の質問は、最初のjComboBox "jComboBox0"を変更すると、どのように3番目のjComboBox "jCombobox2"のアイテム変更のアクションを防止するのですか? – Lizinh

+1

OK ..それを質問に編集してもらいたいです。私の最初のコメントの助けを借りて問題を解決しましたか?そうでなければ、私の2番目のコメントに記載されているMCVEはどうですか? –

答えて

0

あなたのコードの問題は、要素が選択されているかどうかをチェックしていないということのようです。項目が選択されている場合は、リスナーの内部をチェックする必要があります。チェックしないと、itemStateChangeメソッドが2回呼び出されます。

私は3つのコンボボックスを持っているコードとすべての3つのコンボのための単一のリスナーの下に掲示:

import java.awt.FlowLayout; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 

import javax.swing.JComboBox; 
import javax.swing.JFrame; 

public class MainWindow1 extends JFrame implements ItemListener { 

    public MainWindow1() { 

     String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; 

     //Create the combo box, select item at index 4. 
     //Indices start at 0, so 4 specifies the pig. 

     setLayout(new FlowLayout()); 

     JComboBox petList1 = new JComboBox(petStrings); 
     //petList1.setSelectedIndex(4); 
     petList1.addItemListener(this); 
     petList1.setName("petList1"); 

     JComboBox petList2 = new JComboBox(petStrings); 
     petList2.setSelectedIndex(4); 
     petList2.addItemListener(this); 
     petList2.setName("petList2"); 

     JComboBox petList3 = new JComboBox(petStrings); 
     petList3.setSelectedIndex(4); 
     petList3.addItemListener(this); 
     petList3.setName("petList3"); 

     getContentPane().add(petList1); 
     getContentPane().add(petList2); 
     getContentPane().add(petList3); 


     setSize(800, 600); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new MainWindow1(); 

    } 

    @Override 
    public void itemStateChanged(ItemEvent e) { 
     if (e != null && e.getSource().toString() != null && e.getSource().toString().contains("petList1") && e.getStateChange() == ItemEvent.SELECTED) { 

      System.out.println("1" + e.getSource()); 
     } else if (e != null && e.getSource().toString() != null && e.getSource().toString().contains("petList2") && e.getStateChange() == ItemEvent.SELECTED) { 
      System.out.println("2" + e.getSource()); 
     } else if (e != null && e.getSource().toString() != null && e.getSource().toString().contains("petList3") && e.getStateChange() == ItemEvent.SELECTED) { 

      System.out.println("3" + e.getSource()); 
     } 

    } 

} 
+1

jcomboboxが空であるかどうかを確認して、今朝私はそれを解決しました。 – Lizinh

関連する問題