Boa tarde, estou desenvolvendo um programa de java usando o netBeans.
Eu tenho um menu que possui uma comboBox que é prenchida com vários nomes, para dps aceder à informação dos mesmos.
Quando o programa arranca é lido um ficheiro XML e a combobox é prenchida da seguinte forma:
for (int ii = 0; ii < playerList.size(); ii++) {
Players sdf = playerList.get(ii);
this.jComboBox1.insertItemAt(sdf.getPlayerName(), ii);
}
Quando eu actualizo o ficheiro XML a dada altura, volto a chamar a função que le e prenche os novos dados.
Necessito então de apagar o conteudo da combobox e prencher com os novos dados (até podem vir a ser o mesmo!, mas não importa).
Então coloquei a função jComboBox1.removeAllItems();
(antes da parte de prencher a comboBox corre tudo bem)
Quando o xml é actualizado e volto a chamar a função dá-me a seguinte excepção:
Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.get(ArrayList.java:324)
at jma.JMAmain.jComboBox1ActionPerformed(JMAmain.java:1654)
at jma.JMAmain.access$300(JMAmain.java:54)
at jma.JMAmain$5.actionPerformed(JMAmain.java:581)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1242)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1313)
at javax.swing.JComboBox.intervalRemoved(JComboBox.java:1333)
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:161)
at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxModel.java:169)
at javax.swing.JComboBox.removeAllItems(JComboBox.java:753)
at jma.JMAmain.jButton3ActionPerformed(JMAmain.java:1580)
at jma.JMAmain.access$400(JMAmain.java:54)
at jma.JMAmain$6.actionPerformed(JMAmain.java:841)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6041)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5806)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Pesquisei no google disseram para colocar esta linha mas o resultado manteve-se:
coloquei dps da função initcomponents():
this.jComboBox1.setModel(new DefaultComboBoxModel());
Um bocado em desespero e para despachar fiz esta solução pouco bonita (completamente martelada)
//remove
for (int ii = (this.jComboBox1.getItemCount() - 1); ii > 0; ii--) {
System.out.println("indice" + ii);
//System.out.println(this.jComboBox1.getSelectedIndex());
System.out.println(this.jComboBox1.getItemAt(ii));
this.jComboBox1.removeItemAt(ii);
}
//new Fill
for (int ii = 0; ii < playerList.size(); ii++) {
Players sdf = playerList.get(ii);
this.jComboBox1.insertItemAt(sdf.getPlayerName(), ii);
}
//remove ancient fist entrance
jComboBox1.setSelectedIndex(0);
this.jComboBox1.removeItemAt((this.jComboBox1.getItemCount() - 1));
jComboBox1.setSelectedIndex(0);
Até a remover elemento a elemento tive problemas pois não consegui apagar o indice 0, tendo de o apagar depois de novo prenchimento quando este já era o ultimo indice ou item.
Pensei que fosse por estar selecionado ai tentei:
this.jComboBox1.setSelectedIndex(-1);
public void setSelectedIndex(int anIndex)
Selects the item at index anIndex.
Parameters:
anIndex - an integer specifying the list item to select, where 0 specifies the first item in the list and -1 indicates no selection
mas esta linha também devolve uma excepção:
Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: -1
Quem puder ajudar ficava muito agradecido
Obrigado pela ajuda e peço desculpa pelo tempo despendido a ler este tópico:$
