Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen.

Aluna

Neues Mitglied
Hallo,
ich schreibe gerade für unser P&P ein Programm, dass unsere Kampfberechnung ausführen soll.
Dafür soll über eine JComboBox ein Name ausgewählt werden. Jeder Name in der JComboBox hat eine eigene
Klasse mit verschiedenen Werten wie Kraft, Rüstung etc.

Java:
public class Sakat {
static int Rüstung = 10;
static int Stärke = 800;
static int Stabilität = 1;
}

Jetzt möchte ich mit dem Wert Stärke eine Rechnung machen, kann aber nicht auf den Wert zugreifen.

Code:
String AngreiferName = (String)AngreiferBox.getSelectedItem();
int Kraft = AngreiferName.Stärke + 10*Kraftwert;

Wenn ich für "AngreiferName" direkt einen Klassen Namen wie z.B. "Sakat" benutze, funktioniert es. Es soll sich aber der Auswahl aus der JComboBox anpassen.

Vielen Dank schon im voraus.
 
Ich bezweifle, dass dein/euer Design so richtig/gut ist. Wieso sind alle Attribute in Sakat statisch? Instanziiert ihr die Klassen überhaupt (legt also Objekte an)?
Das du nicht auf die Attribute von Sakat zugreifen kannst ist logisch. AngreiferName ist vom Typ String und nicht vom Typ Sakat.
Dein Problem ist momentan, dass du in deiner JCombobox Strings speicherst. So hast du kein Mapping zwischen "String aus der Cb" und "der Klasse die du brauchst".
Hier gibt es verschiedene Wege. Du könntest du über eine Map nachdenken. Eine andere Möglichkeit wäre, als Typ der Elemente in der Combobox direkt die Klasse zu nehmen und zu bestimmen, welches Attribut in der Combobox angezeigt werden soll.
Da ich keine Ahnung habe was ein Sakat ist und dein Design dafür wahrscheinlich auch nicht geeignet sein wird, versuch ich es mal an einem anderen Beispiel zu beschreiben:
Java:
class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /** Getter & Setter **/

    public String getInfo() {
        return String.format("%s ist %d Jahre alt", name, age);
    }

    @Override
    public String toString() {
        return name;
    }
}

class Test {

    private void buildAndShowUI() {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setSize(150, 50);

        Person[] items = { new Person("Hans", 28), new Person("Paul", 19), new Person("Frank", 55) };

        JComboBox<Person> personCb = new JComboBox<>(items);
        personCb.addActionListener(event -> System.out.println(((Person) personCb.getSelectedItem()).getInfo()));

        frame.add(personCb);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().buildAndShowUI());
    }
}
 

Zurück
Oben