jCombobox 空指针异常
jCombobox NullPointer exception
我正在创建一个包含 3 个组合框的框架,每个组合框都相互依赖,第 3 个依赖于第 2 个,第 2 个依赖于第 1 个。
问题是当我更改第一个时,我在 3rd 得到 NullPointer 异常,因为它是 2nd 的更改操作。
我的问题是当我更改第一个 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
}
您的代码的问题似乎是您没有检查是否选择了某个元素。如果一个项目被选中,你应该在你的侦听器内部检查,如果你不检查,itemStateChange 方法将被调用两次。
我 post 下面的代码具有三个组合框和一个用于所有三个组合的侦听器:
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());
}
}
}
我正在创建一个包含 3 个组合框的框架,每个组合框都相互依赖,第 3 个依赖于第 2 个,第 2 个依赖于第 1 个。 问题是当我更改第一个时,我在 3rd 得到 NullPointer 异常,因为它是 2nd 的更改操作。
我的问题是当我更改第一个 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
}
您的代码的问题似乎是您没有检查是否选择了某个元素。如果一个项目被选中,你应该在你的侦听器内部检查,如果你不检查,itemStateChange 方法将被调用两次。
我 post 下面的代码具有三个组合框和一个用于所有三个组合的侦听器:
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());
}
}
}