[Java] Konflikt zwischen Label verschieben und setText() [Schulprojekt]

07/06/2011 23:11 Endtothenight#1
Hallo zusammen,

da mir mit diesem Projekt bei einer anderen Frage bereits gut weitergeholfen wurde möchte ich nochmal eine Frage stellen, aber zunächst nochmal die gesamtsituation:
Wir bauen mit Java das Brettspiel "Mensch ärgere dich nicht" nach und nutzen dafür die Netbeans IDE. Die Spielfiguren werden durch Labels, die ein Icon beinhalten dargestellt. Jetzt müssen diese Label natürlich verschoben werden, was auch kein Problem an sich darstellt. Das Problem besteht darin, dass man zwar die Labels mit label.setLocation(x,y) oder label.setBounds(x,y,h,w) verschieben kann, diese aber nachdem man den Text eines anderen Labels mit label2.setText("String") ändert wieder auf die ursprüngliche Position zurückgesetzt werden. Ich hoffe ihr könnte mir bei dem Problem weiterhelfen...

Ich werde das ganze Teil mal anhängen.

Danke im Vorraus, Morris
07/07/2011 11:27 Secredo#2
Du könntest alle Positionen speichern, Text ändern, Positionen wieder setzen.
Weiß nicht ob ihr sowas "dreckiges" benutzen dürft. ;)
07/07/2011 13:28 Endtothenight#3
Quote:
Originally Posted by Secredo View Post
Du könntest alle Positionen speichern, Text ändern, Positionen wieder setzen.
Weiß nicht ob ihr sowas "dreckiges" benutzen dürft. ;)
Das wäre theoretisch möglich, nur finde ich das extrem unschön und nervig das nach jedem Text ändern wieder aufzurufen, gibt es da nicht eine andere Möglichkeit? Beziehungsweise weiss jemand, woran das liegen könnte, ich hab nicht so wirklich viel Ahnung von Java...

LG
07/07/2011 13:40 nkkk#4
könnte am swing layout-manager ligen.

in java benutzt man oft den swing layout manager:
das heisst du legst nciht selbst fest wo die bottuns, labels etc stehen mit koordinaten, sondern das macht er für er für dich.

normalerweise sagt man nur ob die buttons z.B. nebeneinandere oder übereinander etc sein sollen(mit Panels, borderlayout etc).

in einen fall ist es möglichweise so: sobald du settext aufrufst vergrössert sich die grösse des labels. Darauf hin sagt sich der layout manager: ah jetzt hat sich ja was geändert ich muss also nochmal neu berechnen wo ich die ganzen labels, buttons etc am besten hinpacke, und er kommt wiederzu dem selben schluss wie da wo er es zuvor hingetan hat.
07/07/2011 15:12 Endtothenight#5
Hm, das klingt logisch. Kann man dem den vielleicht mitteilen, dass man nicht alles neu gemalt haben will sondern nur das panel auf dem das stattfindet?
07/07/2011 16:19 nkkk#6
sry so genau weiss ich das nciht ist schon ne weile her das ich das letze mal programme in java geschreiben hab.


aber du bist dur sicher das es nicht ohne setposition geht ?
aslo mit boxlayout, flowlayout etc ?
07/07/2011 16:22 Bot_interesierter#7
Vorweg, ich kenne mich nicht sonderlich mit Java aus, aber wäre es nicht sinnvoll das Spielfeld und die Spielfiguren durch Grafikobjekte darzustellen, statt labels zu zweckentfremden?
Natürlich musst du dafür eine Spielfeld und eine Spielfigur Klasse erstellen und EventHandler für die entsprechenden Inputevents registrieren, aber dann kannst du dir sicher sein dass sich alles genau so verhält wie du es Programmierst.
07/07/2011 16:32 nkkk#8
Quote:
Originally Posted by Bot_interesierter View Post
Vorweg, ich kenne mich nicht sonderlich mit Java aus, aber wäre es nicht sinnvoll das Spielfeld und die Spielfiguren durch Grafikobjekte darzustellen, statt labels zu zweckentfremden?
Natürlich musst du dafür eine Spielfeld und eine Spielfigur Klasse erstellen und EventHandler für die entsprechenden Inputevents registrieren, aber dann kannst du dir sicher sein dass sich alles genau so verhält wie du es Programmierst.
sry hatte den ersten post genu genug gelesen.

aber ich muss zustimmen das es wohl besser währe zu "malen", anstatt labels zu benutzten.

zum "malen" kann man z.B. eine unterklasse von "JPanel" bauen und die "paintComponent()" methode überschreiben:


einfaches beisiel:
07/07/2011 17:02 Endtothenight#9
Was müsste ich den dazu alles importieren?
07/07/2011 18:09 nkkk#10
Quote:
Originally Posted by Endtothenight View Post
Was müsste ich den dazu alles importieren?
Code:
import java.awt.*;
import javax.swing.*;
07/07/2011 21:40 Endtothenight#11
Quote:
Originally Posted by nkkk View Post
könnte am swing layout-manager ligen.

in java benutzt man oft den swing layout manager:
das heisst du legst nciht selbst fest wo die bottuns, labels etc stehen mit koordinaten, sondern das macht er für er für dich.

normalerweise sagt man nur ob die buttons z.B. nebeneinandere oder übereinander etc sein sollen(mit Panels, borderlayout etc).

in einen fall ist es möglichweise so: sobald du settext aufrufst vergrössert sich die grösse des labels. Darauf hin sagt sich der layout manager: ah jetzt hat sich ja was geändert ich muss also nochmal neu berechnen wo ich die ganzen labels, buttons etc am besten hinpacke, und er kommt wiederzu dem selben schluss wie da wo er es zuvor hingetan hat.
Ich hab mich nach dieser äußerst hilfreichen Information für folgende funktionierende, wenn auch unschöne, Lösung entschieden:
Ich habe das Hintergrundbild [Spielfeld] mit den Labels [Spielfiguren] in ein seperates Form gepackt und die Buttons, Anzeigelabels etc in ein anderes. Jetzt habe ich zwar 2 Fenster, aber die Spielfiguren werden nicht auf 0 zurückgesetzt.

Danke für eure Antworten!
07/07/2011 23:45 Obilee#12
wärs nicht sinnvoller die weißen felder wo die figuren drauf landen können als feste label / buttons / what ever zu erstellen wo einfach nur die farbe geändert wird ? Dann muss man sich auch nicht um koordinaten usw. kümmern

wenn man es mit buttons macht kann man auch gleich somit sagen welche spielfigur bewegt werden soll durch den actionlistener
07/08/2011 07:23 Endtothenight#13
Quote:
Originally Posted by Obilee View Post
wärs nicht sinnvoller die weißen felder wo die figuren drauf landen können als feste label / buttons / what ever zu erstellen wo einfach nur die farbe geändert wird ? Dann muss man sich auch nicht um koordinaten usw. kümmern

wenn man es mit buttons macht kann man auch gleich somit sagen welche spielfigur bewegt werden soll durch den actionlistener
Das blöde ist dann nur, dass ich nachher 72 Buttons hätte ;)
07/08/2011 10:13 Obilee#14
Und wo ist das Problem ? 1 Array und gut ist.
Dies zu ändern ist ja jetzt eh zu Spät da ihr schon zu Weit im Programm seid :P
07/08/2011 14:18 Endtothenight#15
Quote:
Originally Posted by Obilee View Post
Und wo ist das Problem ? 1 Array und gut ist.
Dies zu ändern ist ja jetzt eh zu Spät da ihr schon zu Weit im Programm seid :P
...und wir Ende nächster Woche vorstellen sollen...