Fehlerfeuerwerk

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

ich habe ein kleiner Prob. Ich habe eine JComboBox und wenn ich aus dem Menü der JComboBox ein Element
auswähle, dann werden mir die Werte, die ich mit dem Menü verbunden habe auch auf allen JLabe angezeigt,
nur dann bekomme ich ein Fehlerfeuerwerk zu sehen, dass seines gleichen sucht.

Code, mit dem ich die JLabels erzeuge (14 Stück)
Code:
                              int zahl_1 = str_5.length;
										 label_2 = new JLabel[zahl_1];
											for(int wert = 0; wert < str_5.length; wert++)
											{
												label_2[wert] = new JLabel(str_5[wert]);
												label_2[wert].setBorder(BorderFactory.createEtchedBorder());
												label_2[wert].setOpaque(false);
												label_2[wert].setBackground(Color.white);
												label_2[wert].setPreferredSize(new Dimension(130,20));
												p3.add(label_2[wert]);
											}

und nun der Code für meine JComboBox:
Code:
                    cb = new JComboBox(mot2);					
							 cb.setPreferredSize(new Dimension(150,20));
							 cb.setBackground(Color.blue);
							 cb.setForeground(Color.white);
							 cb.addItemListener(new KlasseItemEvent()
							 {
								 public void itemStateChanged(ItemEvent ie)
								 {									 
									 JComboBox combo = (JComboBox)ie.getSource();
									 
									 	if(combo.getSelectedIndex() == 1)
									 	{								
									 		String[] args = mot3;
									 		for(int r = 0; r <= mot3.length; r++)
									 		{									 												 	
									 		label_2[r].setText(args[r]);
									 		}
									 	}
								 }
							 });

Die Elemente des Arrays werden auch einzeln nacheinander den JLabels zugewiesen, so wie ich es auch
mir gedacht habe nur dann bekomme ich die Liste an Fehlermeldungen.

Code:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 14
	at wizard_rahmen_allgemein.BMW_1$1.itemStateChanged(BMW_1.java:213)
	at javax.swing.JComboBox.fireItemStateChanged(Unknown Source)
	at javax.swing.JComboBox.selectedItemChanged(Unknown Source)
	at javax.swing.JComboBox.contentsChanged(Unknown Source)
	at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
	at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
	at javax.swing.JComboBox.setSelectedItem(Unknown Source)
	at javax.swing.JComboBox.setSelectedIndex(Unknown Source)
	at javax.swing.plaf.basic.BasicComboPopup$Handler.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 javax.swing.plaf.basic.BasicComboPopup$1.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)

Das passiert nur dann, wenn ich das Element aus der JComboBox auswähle, das dann das Array "mot3"
in die JLabels einfügen soll.

Vielleicht habt ihr ja eine Idee, weil ich schon seit einer Woche versuche das heraus zu finden

Gruß monet
 
G

Guest

Gast
Nachtrag:

hab noch vergessen zu sagen, dass sich alles in einem Kostruktor befindet und ich habe das Gefühle,
dass es vielleicht daran liegen könnte.

Gruß monet
 
G

Guest

Gast
Hi,

André Uhres hat gesagt.:
Mach bitte ein KSKB.

hmm, das Problem ist, dass sich alle notwendigen Daten in verschieden Packages befinden. Das würde echt den Rahmen sprengen.

Vielleicht hilft Dir das weiter:

Code:
public BMW_1()//Konstruktor
{
		super("BMW");
		
		Container c = getContentPane();
		c.setLayout(new BorderLayout());

			
			JMenuBar mb = new JMenuBar();
			mb.setBackground(Color.red);
			mb.setOpaque(true);
			
				
//***************************************************************
			
	int zahl = str_1.length; 
	JMenu[] menu = new JMenu[zahl];					 		
		for(int k = 0; k < menu.length; k++)
			{								
				menu[k] = new JMenu();
				menu[k].setForeground(Color.black);
				menu[k].setOpaque(true);
				menu[k].setBackground(Color.yellow);
			}
						
			for(int a = 0; a < str_1.length; a++) 
		 		{
		 			menu[a].setText(str_1[a]);
		 		}
//			 *********************************************************************
			 				
		int zahl1 = str_2.length;
		JMenuItem[] menuitem = new JMenuItem[zahl1];
			for(int d = 0; d < menuitem.length; d++)
			{
				menuitem[d] = new JMenuItem(str_2[d]);					 												 							
				menu[0].add(menuitem[d]);
				menu[0].setBackground(Color.green);
				menu[0].setForeground(Color.white);
				
			}					 					
			
		int zahl2 = str_3.length;
			JMenuItem[] menuitem1 = new JMenuItem[zahl2];
				for(int e = 0; e < menuitem1.length; e++)
				{
					menuitem1[e] = new JMenuItem(str_3[e]);
					menu[1].add(menuitem1[e]);				 												 						
												
				}					
				int zahl3 = str_4.length;
					JMenuItem[] menuitem2 = new JMenuItem[zahl3];
						for(int y = 0; y < menuitem2.length; y++)
						{
							menuitem[y] = new JMenuItem(str_4[y]);						 														 									
							menu[2].add(menuitem[y]);					 								
						}
				
//********************************************************************************					 									 						 									 				
						 			for(int w = 0; w < menu.length; w++)
						 			{
						 				mb.add(menu[w]);
						 			}


                    *
                    *
                    *
                    *
                    *
                    *
                                         . 
cb = new JComboBox(mot2);					
							 cb.setPreferredSize(new Dimension(150,20));
							 cb.setBackground(Color.blue);
							 cb.setForeground(Color.white);
							 cb.addItemListener(new KlasseItemEvent()
							 {
								 public void itemStateChanged(ItemEvent ie)
								 {									 
									 JComboBox combo = (JComboBox)ie.getSource();
									 {
									 	if(combo.getSelectedIndex() == 1)
									 	{								
									 		String[] args = mot3;
									 		for(int r = 0; r <= mot3.length; r++)
									 		{									 												 	
									 		label_2[r].setText(mot3[r]);									 		
									 	}
									 	}
								 }
								 }
							 });
							 //**************************************************************************************
							
//							 	ButtonComboBoxDelete();
						 
//****************************************************************************************
													 						 
						 int zahlWert = mot.length;//Die Zahl der JLabel ist abhängig von der Länge des String str_5
								label = new JLabel[zahlWert];										
									for(int i = 0; i < mot.length; i++)
									{
										label[i] = new JLabel(mot[i]);
//										label[i].setBorder(BorderFactory.createRaisedBevelBorder());
										p2.add(label[i]);
										
//											if(i == 28)
//											{
//												label[i].setBorder(BorderFactory.createEmptyBorder());
//											}
//											if(i == 29)
//											{
//												label[i].setBorder(BorderFactory.createEmptyBorder());
//											}
									}
									//Label auf der rechtes Seite im linken Feld
									int zahl_1 = str_5.length;
										 label_2 = new JLabel[zahl_1];
											for(int wert = 0; wert < str_5.length; wert++)
											{
												label_2[wert] = new JLabel(str_5[wert]);
												label_2[wert].setBorder(BorderFactory.createEtchedBorder());
												label_2[wert].setOpaque(false);
												label_2[wert].setBackground(Color.white);
												label_2[wert].setPreferredSize(new Dimension(130,20));
												p3.add(label_2[wert]);
											}
							

//**********************************************************************************************************
									
								p4.add(p2, BorderLayout.WEST);
								p4.add(p3, BorderLayout.EAST);
								p.add(p4, BorderLayout.WEST);								
								p5.add(cb);
//								p5.add(b2);
								p.add(p5, BorderLayout.NORTH);
								
								
									c.add(p);	
					
										setJMenuBar(mb);//JMenuBar festlegen								 	
								 setContentPane(c);
}

Ich weiß, der Code ist so nicht Compilierbar, sorry :oops:
Vielleicht kannst Du mir trotzdem helfen.

Gruß monet
 
B

Beni

Gast
Code:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 14
   at wizard_rahmen_allgemein.BMW_1$1.itemStateChanged(BMW_1.java:213)

Der Fehler tritt in der Klasse BMW in Zeile 213 auf. Offenbar wird da versuchst aus einem Array zu lesen oder in ein Array zu schreiben, aber der benutzt Index ist zu gross.
Das typische Vorgehen wäre jetzt: eine IDE starten, einen Breakpoint bei BMW 213 setzen, das Programm starten und den Fehler erzeugen. Der Debugger hält das Programm an, und du kannst die Werte aller Variablen anschauen. Da ich dein Programm nicht kenne (und auch nicht per email erhalten möchte), kann ich nicht mehr helfen.
 
G

Guest

Gast
Hi,

danke erstmal an Beni :)
Das typische Vorgehen wäre jetzt: eine IDE starten, einen Breakpoint bei BMW 213 setzen, das Programm starten und den Fehler erzeugen. Der Debugger hält das Programm an, und du kannst die Werte aller Variablen anschauen

Ich habe bis jetzt noch leider nicht mit dem Debugger gearbeitet :? werde es aber wohl in Angriff nehmen.



Danke Schandro :applaus:

Der Tipp war der Richtige. Ich bekomme keine einzige Fehlermeldung mehr und alles läuft so wie
ich es mir gedacht habe. Jetzt gehe ich beruhigt ins Bett :D

Gruß monet
 
Status
Nicht offen für weitere Antworten.

Oben