# Objektnamen dynamisch erzeugen



## Pichel (17. Juli 2008)

Hallo,

folgendes Problem.

Ich habe JTextField's dynamisch erzeugt. Das Problem dabei ist, das der Objectname immer die gleiche sind. Meine Frage ist nun, wie kann man die Namen auch dynamisch erzeugen? Also so, dass es name1, name2, usw. wird. Oder ich kann auf die Referenztypen zugreifen. Mein Quellcode für die Objecterzeugung sieht so aus...


```
int hoeheRY = 2;
		for( int j = 0; j <=20; j++ ){
			JLabel jlr = new JLabel(labelName[j]);
			jlr.setOpaque(true);
			if(j == 7)
				hoeheRY = hoeheRY + 5;
			if(j == 18)
				hoeheRY = hoeheRY + 5;	
			if(j < 7){
				Color.RGBtoHSB(154, 232,139 ,hsbvals);
				jlr.setBackground(Color.getHSBColor(hsbvals [0],hsbvals [1],hsbvals [2]));
			}
			if(j>6 && j<18){
				Color.RGBtoHSB(244, 238,106 ,hsbvals);
				jlr.setBackground(Color.getHSBColor(hsbvals [0],hsbvals [1],hsbvals [2]));
			}
			if(j>17){
				Color.RGBtoHSB(251, 195,195 ,hsbvals);
				jlr.setBackground(Color.getHSBColor(hsbvals [0],hsbvals [1],hsbvals [2]));
			}
			hoeheRY = hoeheRY;	
			jlr.setBounds(340, hoeheRY, 200, 17);
			add(jlr);
			
			String temp =""; 
			//(Object)temp;
			JTextField tfr = new JTextField("tf " + j);
			tfr.setBounds(540, hoeheRY, 30, 17);
			add(tfr);
			
			hoeheRY = hoeheRY + offset;
			
			}
```

Mir gehts dabei nur um die Textfelder, da ich die Werte logischeweise benötige

Danke schon mal!!


----------



## hammet (17. Juli 2008)

Und wenn du das erstellte TextField in eine Liste packst? (Vector etc.)
Dann kannst du dir die TextFields aus der Liste wiederholen.


----------



## jacko87 (17. Juli 2008)

So würde ich es machen. Habe eine Variable "felder" vom Typ ArrayList eingefügt, in dem die Referenzen auf die Textfelder abgelegt werden.
Wenn du konkret mit dem Namen auf die Felder zugreifen willst, kannst du das ganze auch in eine Map legen.


```
int hoeheRY = 2;

//jac added: hier die Liste
ArrayList<JTextField> felder = new ArrayList<JTextField>();


for( int j = 0; j <=20; j++ ){
	JLabel jlr = new JLabel(labelName[j]);
	jlr.setOpaque(true);

	// jac changed: Abfrage ist disjunkt, daher besser else if
	if(j == 7){
		hoeheRY = hoeheRY + 5;
	}else if(j == 18){
		hoeheRY = hoeheRY + 5;	
	}

	if(j < 7){
		Color.RGBtoHSB(154, 232,139 ,hsbvals);
		jlr.setBackground(Color.getHSBColor(hsbvals [0],hsbvals [1],hsbvals [2]));
	} else if(j>6 && j<18){
		Color.RGBtoHSB(244, 238,106 ,hsbvals);
		jlr.setBackground(Color.getHSBColor(hsbvals [0],hsbvals [1],hsbvals [2]));
        } else if(j>17){
		Color.RGBtoHSB(251, 195,195 ,hsbvals);
		jlr.setBackground(Color.getHSBColor(hsbvals [0],hsbvals [1],hsbvals [2]));
	}
	hoeheRY = hoeheRY;	
	jlr.setBounds(340, hoeheRY, 200, 17);
	add(jlr);
	String temp =""; 
	//(Object)temp;
	JTextField tfr = new JTextField("tf " + j);
	tfr.setBounds(540, hoeheRY, 30, 17);

	//jac added: hier werde die Textfelder der Liste hinzugefügt
	felder.add(tfr);

	add(tfr);
	hoeheRY = hoeheRY + offset;
}
```

Hier noch ein Vorschlag, um den Code zu verbessern, die meisten IF Abfragen sind disjunkt, daher würde else if den Programmablauf beschleunigen, da nicht immer jede Bedingung geprüft werden müsste. Ich habe das gleich mal eingabaut. das ließe sich noch weiter treiben, indem man alle IF disjunkt und teile des Codes doppelt pastet, aber so groß ist der Effekt nun auch wieder nicht

Viel Spaß damit
greetz jacko

EDIT: upps da war jemand schneller!


----------



## Pichel (17. Juli 2008)

Hallo, 

danke für die vielen Tipps. Ich werde sie alle einmal ausprobieren

vg


----------

