Способствует ли метод JComboBox.removeAllItems()
событию ItemStateChanged ..?
Если да, то как определить погоду событие создается из-за действия пользователя или из-за вызова метода removeAllItems() ..?
У меня есть код в методе itemStateChanged() поля со списком, который будет работать нормально, когда пользователь изменяет свой выбор в поле со списком, но по характеру кода он выдает исключение нулевого указателя при его вызове из-за вызова removeAllItems() в этом поле со списком. Если я могу определить причину для метода removeAllItems() и вернуть элемент управления, тогда моя проблема будет решена. Как мне это сделать..?
UPDATE
После того как вы люди поставили ответы, я использовал следующий код ...Как определить источник события ..?
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getSource()==branch_list)
{
if(!UserConstants.FID.contains("hod"))
{
ignoreEvents=true;//static boolean variable not used by any other methods
year_list.removeAllItems();
year_list.addItem(" ");
sem_list.removeAllItems();
sem_list.addItem(" ");
branch_list.removeAllItems();
branch_list.addItem(" ");
if(branch_list.getSelectedItem().equals(" "))
return;
Iterator year_it=DatabaseConnector.map.get(branch_list.getSelectedItem().toString()).keySet().iterator();
while(year_it.hasNext())
{
year_list.addItem(year_it.next());
}
ignoreEvents=false;
}
return;
}
else if(e.getSource()==year_list)
{
if((branch_list.getSelectedItem()==null)||branch_list.getSelectedItem().toString().equals(" ")||ignoreEvents)
return;
sem_list.removeAllItems();
section_list.removeAllItems();
sem_list.addItem(" ");
section_list.addItem(" ");
Iterator i=DatabaseConnector.map.get(branch_list.getSelectedItem().toString()).get(year_list.getSelectedItem().toString()).iterator();
int first=0;
while(i.hasNext())
{
String cur=i.next().toString();
if(first==0)
{
sem_list.addItem(cur.charAt(0));
section_list.addItem(cur.charAt(1));
first++;
}
else
{
section_list.addItem(cur.charAt(1));
}
}
}
}
I am getting the following error:-
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.nio.cs.SingleByteEncoder.encodeArrayLoop(SingleByteEncoder.java:91)
at sun.nio.cs.SingleByteEncoder.encodeLoop(SingleByteEncoder.java:130)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:544)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:252)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
at java.io.PrintStream.write(PrintStream.java:476)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)
at attendence.Home.itemStateChanged(Home.java:427)
и так далее ...........
да, эти два варианта являются действительными, спасибо. Но разве нет способа узнать, что вызвало эти события? Я ожидал чего-то подобного. – sasidhar
Вы не найдете ни одного флага, содержащего какое-либо значение «CAUSED_BY_REMOVE_ALL» или что-нибудь еще. Помимо констант в классе 'ItemEvent' и методе' getStateChange', вам придется самому отслеживать это. – aioobe
, пожалуйста, посмотрите мое обновление и помогите мне как можно скорее .... – sasidhar