Hey ho,
ich hab folgendes Problem. Ich möchte aus einer Datenstruktur, die wir haben und schon fertig funktioniert, Werte rausziehen und diese anzeigen lassen per JLabel. (Es geht um eine Ressourcen-Anzeige eines Strategie Spiels ala Warcraft o.ä.). Diese Werte kommen vom Server und unsere Datenstruktur wird damit gefüttert. Wenn sich ein Wert einer Ressource ändert, wird folgende Funktion aufgerufen:
Resource.java
Damit möcht ich dann in unserer GUI immer wieder die Ressource-Anzeigen ändern. Das tue über Observer und zwar so:
Theoretisch sollte das meiner Meinung nach schon funktionieren. Tut es aber leider nicht. Die Werte bleiben gleich.
An der Datenstruktur liegt es nicht, die Werte werden definitiv geändert (das hab ich schon getestet).
Weitere Tipps vielleicht?
ich hab folgendes Problem. Ich möchte aus einer Datenstruktur, die wir haben und schon fertig funktioniert, Werte rausziehen und diese anzeigen lassen per JLabel. (Es geht um eine Ressourcen-Anzeige eines Strategie Spiels ala Warcraft o.ä.). Diese Werte kommen vom Server und unsere Datenstruktur wird damit gefüttert. Wenn sich ein Wert einer Ressource ändert, wird folgende Funktion aufgerufen:
Resource.java
Java:
public class Resource extends Component {
// Component ist die Oberklasse von der alles abgeleitet wird. Diese erbt auch von Observable.
// ...
public void setQuantity(int quantity) {
this.quantity = quantity;
setChanged();
notifyObservers(this);
}
}
Damit möcht ich dann in unserer GUI immer wieder die Ressource-Anzeigen ändern. Das tue über Observer und zwar so:
Java:
public class GameController implements Observer {
public void update(Observable o, Object arg) {
// ....
if (arg instanceof Resource) {
String resourceType = ((Resource) arg).getType();
if((resourceType.equals("ROCK")) || (resourceType.equals("WOOD"))) {
updateResourceOverview();
}
}
}
// ---------------------------
private void updateResourceOverview() {
int collectedWood = 0;
int collectedRock = 0;
int availableWood = 0;
int availableRock = 0;
Iterator<Resource> availableIter = currentSector.getAvailableResources().iterator();
Resource tmpAvailable;
while(availableIter.hasNext()) {
tmpAvailable = availableIter.next();
if(tmpAvailable.getType().equals("ROCK")) {
availableRock = tmpAvailable.getQuantity();
}
if(tmpAvailable.getType().equals("WOOD")) {
availableWood = tmpAvailable.getQuantity();
}
}
Iterator<Resource> collectedIter = currentSector.getBuildings().iterator().next().getCollectedResources().iterator();
Resource tmpCollected;
while(collectedIter.hasNext()) {
tmpCollected = collectedIter.next();
if(tmpCollected.getType().equals("ROCK")) {
collectedRock = tmpCollected.getQuantity();
}
if(tmpCollected.getType().equals("WOOD")) {
collectedWood = tmpCollected.getQuantity();
}
}
gameScreen.getStoneLabel().setText(collectedRock + " / " + availableRock);
gameScreen.getWoodLabel().setText(collectedWood + " / " + availableWood);
gameScreen.getStoneLabel().repaint();
gameScreen.getWoodLabel().repaint();
}
}
Theoretisch sollte das meiner Meinung nach schon funktionieren. Tut es aber leider nicht. Die Werte bleiben gleich.
An der Datenstruktur liegt es nicht, die Werte werden definitiv geändert (das hab ich schon getestet).
Weitere Tipps vielleicht?