Button Array verschieben klappt nicht.

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Hello World,

ich erzeuge ein JButton Array (Truhe extends JButton). Dann erzeuge ich mit spawnTruhe immer eine neue. Dann wird in der Schleife alle Truhen um eins im Array zurück gesetzt. Das funktioniert auch soweit. Mein Problem ist aber, das es immer nur eine Truhe anzeigt und auch nur eine existiert. Also man kann die alte nicht mehr anklicken. Weis einer woran das liegt?

Funktioniert etwa "truhen=truhen[i+1];" nicht?

Danke für schnelle Hilfe.

Code:
    public void spawnTruhe(int mnr){
		for(int i=0;i<truhen.length-1;++i){
			System.out.println(truhen[i].ki);
			truhen[i]=truhen[i+1];				
		}
    	truhen[truhen.length-1].ki=monsters.get(mnr).getKi();
    	truhen[truhen.length-1].grade=monsters.get(mnr).grade;
    	switch (truhen[truhen.length-1].grade) {
		case 1:truhen[truhen.length-1].setIcon(new ImageIcon("texture/other/truhe1.gif"));break;
		case 2:truhen[truhen.length-1].setIcon(new ImageIcon("texture/other/truhe2.gif"));break;
		case 3:truhen[truhen.length-1].setIcon(new ImageIcon("texture/other/truhe3.gif"));break;
		default:break;
		}
    	truhen[truhen.length-1].setBounds(monsters.get(mnr).x*64, monsters.get(mnr).y*64,64,64);
    	truhen[truhen.length-1].setVisible(true);
    }
    public void loadtruhen(){
    	for(int i=0;i<truhen.length;++i){
    		truhen[i]=new Truhe(0,0);
    		truhen[i].setLocation(0, 0);
    		truhen[i].setVisible(false);
    		final int nr=i;
			truhen[i].addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					ta.drop(truhen[nr].grade, truhen[nr].ki);
					truhen[nr].setVisible(false);
				}});
    		engine.panel_area.add(truhen[i]);
    	}
    }
 
"Liegt an der Referenz"? Man könnte ähnlich präzise sein und sagen: "Liegt am Code". Was genau ist jetzt die Frage? Soll eine neue Truhe in den Array eingefügt werden? Warum verwendest du keine ArrayList<Truhe>? (Von JButton zu erben ist übrigens ziemlich ... ungewöhnlich)

BTW:
Code:
switch (truhen[truhen.length-1].grade) {
      case 1:truhen[truhen.length-1].setIcon(new ImageIcon("texture/other/truhe1.gif"));break;
      case 2:truhen[truhen.length-1].setIcon(new ImageIcon("texture/other/truhe2.gif"));break;
      case 3:truhen[truhen.length-1].setIcon(new ImageIcon("texture/other/truhe3.gif"));break;
      default:break;
      }
->
Code:
truhen[truhen.length-1].setIcon(new ImageIcon("texture/other/truhe"+truhen[truhen.length-1].grade+".gif"))
(das ist "schöner", aber immernoch nicht "schön")
 
Stimmt, aber kannst nicht davon ausgehen das am ende die Namen wirklich so heißen ;-)

Aber im moment gehts so^^ noch nix optimiert. Erstmal muss alles funktionieren.

Warum eine ArrayList? Will doch nur 10 Truhen haben. Also warum sollte ich dann eine list benutzen?

Nein nicht wirklich ein neuer Button. Nur eine Kopie des ersten. Aber nur die Eigenschaften.
Der Button soll "nachrutschen". Also zum Beispiel:

Vorher: Nachher
1 2
2 3
3 4

Zahlen stehen hier mal für die Eigenschaften. Mein Problem ist jetzt, dass er antscheind durch = nur auf das Obejekt verweist. Also am Ende sind immer alle der letzte hinzugefügte.


Warum nicht von JButton erben? Es verhält sich wie ein Button hat aber noch zwei weitere Werte.
 
Es war nicht klar, was du erreichen wolltest, und wie der bisherige Code aussieht. (Moment ... "war"? Es IST nicht klar :wink: )

FALLS die Frage sich darauf bezieht:
engine.panel_area.add(truhen);
Wenn du jetzt z.B.
truhen[3] = truhen[4];
ausführst, kriegt das Panel davon natürlich nichts mit. Du musst ggf. alle truhen vom Panel entfernen, dann den Array umbauen, und dann die Truhen neu ins Panel einfügen...
 
Was wird wohl bei einem Null-Layout passieren, wenn ich etwas später drauf add? Nix 🙁

Also kann ich diese nicht entfernen. Es müssen bei den 10 Stück doch nur die X,Y Position das Icon und 2 Werte verändert werden. Die Buttons müssen fest verankert bleiben im Array. Auch kein neues, wie ich es schon probiert habe. Dann haben wir wieder das Problem, dass dieses noch nicht auf dem Spielfeld-Panel liegt. Ist zum verzweifeln :autsch:
 
Nicht von JButton zu erben und kein null-Layout zu verwenden wäre eine Alternative, aber ... wenn man die Frage stellt: "Wie kann ich mein Programm verbessern?" will man als Antwort i.a. nicht hören "Schreib' es neu". Vielleicht kannst du ja nach dem Erneuten einfügen die Bounds der Buttons neu setzen (so, wie du sie auch sonst setzt).
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben