JComboBox Problem

Status
Nicht offen für weitere Antworten.

MScalli

Bekanntes Mitglied
Hi Leutz.
Ich habe ein Problem mit ner JComboBox.

Diese wird zur laufzeit mit anderen Daten gefüllt.

Code:
/**
 * füllt die Combo Box mit allen bestehenden Feldern
 * @param arr_column_names
 */
private void fillComboBox(String[] arr_column_names) {
	
	System.out.println("****** vor remove");
	cmb_auswahl.removeAllItems();
	cmb_sort.removeAllItems();
	System.out.println("****** nach remove");
	
    for(int i=0; i < arr_column_names.length; i++)
    {
    	cmb_auswahl.addItem(arr_column_names[i]);
    	cmb_sort.addItem(arr_column_names[i]);
    } 
}

je nach dem was ich brauche nehme ich andere Arrays her und fülle die JComboBox.
Dies funktioniert bis dahein einwandfrei.

Da ich beim ändern des Items paar sachen machen muss(z.B. prüfen ob ein anderes JTextField Daten enthält die zugelassen sind) habe ich mir nen ActionListener angehängt.

Code:
	cmb_auswahl = new JComboBox(); 
	cmb_auswahl.setBounds(10, 30, 200, 25);
        cmb_auswahl.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("********" + arr_column_typ[cmb_auswahl.getSelectedIndex()]);
                if(arr_column_typ[cmb_auswahl.getSelectedIndex()].equals("D")){
                	btn_dat_von.setVisible(true);
                	btn_dat_bis.setVisible(true);
                	tf_von.setEnabled(false);
                	tf_bis.setEnabled(false);
                	tf_von.setText(MyDate.getCurrentDate4Calendar());
                	tf_bis.setText(MyDate.getCurrentDate4Calendar());
                } else {
                	btn_dat_von.setVisible(false);
                	btn_dat_bis.setVisible(false);
                	tf_von.setEnabled(true);
                	tf_bis.setEnabled(true);
                }
                if(arr_column_typ[cmb_auswahl.getSelectedIndex()].equals("I")){
                	tf_von.setText("0");
                	tf_bis.setText("0");
                }
                if(arr_column_typ[cmb_auswahl.getSelectedIndex()].equals("C")){
                	tf_von.setText("");
                	tf_bis.setText("");
                }
            }
        });
	    pan_auswahl.add(cmb_auswahl);

nun bekomme ich hier nen Fehler
.. cmb_auswahl.removeAllItems();

Eine IndexOutOfBounds Exception..
...

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at FerixClient.V0230$1.actionPerformed(V0230.java:139)
at javax.swing.JComboBox.fireActionEvent(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.JComboBox.intervalRemoved(Unknown Source)
at javax.swing.AbstractListModel.fireIntervalRemoved(Unknown Source)
at javax.swing.DefaultComboBoxModel.removeAllElements(Unknown Source)
at javax.swing.JComboBox.removeAllItems(Unknown Source)
at FerixClient.V0230.fillComboBox(V0230.java:553)****** vor remove
at FerixClient.V0230.actionPerformed(V0230.java:518)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.JToggleButton$ToggleButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)


Die Arrays passen alle und es werden immer die richtigen genommen.. Das habe überprüft.
Kann ich das evtl ohne diesen ActionListener lösen.. Ich muss halt z.B. wenn dieses Feld ein Datumsfeld ist
( if(arr_column_typ[cmb_auswahl.getSelectedIndex()].equals("D")) ) Felder vorbelegen usw.
weiss jemand was da falsch läuft???

gruss
MScalli
 
beim Entfernen wird ein Event ausgelöst,
getSelectedIndex() ist dann -1 und ein Arrayzugriff mit -1 macht keinen Sinn,
kannst doch was anderes machen in diesem Fall
 
So beim ersten draufschauen: cmb_auswahl.getSelectedIndex() liefert -1, wenn nichts ausgewählt ist. Wenn man alle Elemente entfernt, ändert sich die Auswahl, actionPerformed wird aufgerufen, und dort wird ggf. auf den index -1 zugegriffen. Fang' ggf. mal den Fall, dass cmb_auswahl.getSelectedIndex()==-1 ist, ab.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben