Java: Objekt-Array in GUI mit Name anzeigen?
Ich habe ein kleines Java-Monopoly geschrieben. Die Möglichkeit, eine Hypothek aufzunehmen, wird über einen InputDialog gelöst (ich weiß, es ist vielleicht nicht die eleganteste Lösung, aber darum geht es nicht).
Im InputDialog möchte ich, dass in dem Dropdown-Menü die Straßen mit ihren Namen (ja, die Variable ist festgelegt in der entsprechenden Klasse) angezeigt werden und nicht wie aktuell mit ihrer ID.
Der Code für das Aufnehmen einer Hypothek sieht so aus:
public boolean hypothek(Spiel Instanz) {
ArrayList<Feld> tempList = new ArrayList<Feld>();
for (int i = 0; i < Besitz.size(); i++) {
if (!Besitz.get(i).hatHypothek) {
tempList.add(Besitz.get(i));
}
}
Feld[] tempArray = tempList.toArray(new Feld[0]);
Feld feld = (Feld) JOptionPane.showInputDialog(Instanz, "Auf welches Grundstück möchtest du eine Hypothek aufnehmen?", "Hypothek aufnehmen", JOptionPane.QUESTION_MESSAGE, null, tempArray, tempArray[0]);
if (feld.equals(null)) {
return false;
}
else {
int y = Besitz.indexOf(feld);
Besitz.get(y).hatHypothek = true;
Kontostand += Besitz.get(y).Preis / 2;
Instanz.updateUI();
return true;
}
}
Ich füge auch noch ein Bild bei, wie der Dialog momentan aussieht.
2 Antworten
Kleines Beispiel =)
class Feld{
private String name;
public Feld(String name) {
this.name = name;
}
public String toString() {
return getClass().getName() + "@" + this.name;
}
public static void main(String[] args){
Feld badstr = new Feld("Badstraße");
Feld west = new Feld("Westbahnhof");
Feld hafen = new Feld("Hafenstraße");
System.out.println(badstr);
System.out.println(west);
System.out.println(hafen);
}
}
Es ist nun schon viele Jahre her, dass ich Swing verwendet habe, aber ich schätze du musst einfach toString() in deiner Feld-Klasse implementieren.
Abgesehen davon ist dein Code wie aus der Zeit gefallen - schau dir mal Themen wie foreach an, wie man mit Interfaces umgeht und wie man Generics initialisiert, wie die Java-Konventionen für Namen sind, und überleg dir mal logisch ob dieser Code Sinn ergibt:
if (feld.equals(null)) {
Oder ob das nicht etwas umständlich ist....:
int y = Besitz.indexOf(feld);
Besitz.get(y).hatHypothek = true;
Falls du sowas wie IntelliJ verwendest, gibt es dort ein "Inspect Code", das dir sowas gleich mit hilfreichen Tipps markiert.
Ja. Du sollst Feld::toString() implementieren (genauer gesagt, dessen Implementierung von Object überschreiben).
Besitz ist keine Klasse, sondern eine ArrayList