in Methode auf GUI Elemente zugreifen?

peter420

Mitglied
Hallo Java-Experten,

Ich habe eine Klasse "BootSimulator", die mir 3 Arten von Wasserfahrzeugen erzeugt.
Da drinnen steht z.B.
Java:
public void erstelleNeuesRuderboot() {
		Ruderboot ruderboot = new Ruderboot();
		ruderboot.setKanonenAnz(1);
                ruderboot.bewegen();
	}
Dann habe ich eine Klasse GUI, in der instanziere ich "BootSimulator", habe 3 Buttons und
einen "ButtonListener":
Java:
class ButtonListener implements ActionListener{	
			public void actionPerformed(ActionEvent e) {
				if(e.getSource() == b1){
					simulator.erstelleNeuesRuderboot();
				}
				else if (e.getSource() == b2){
					simulator.erstelleNeuenSegler();
				}
				else{
					simulator.erstelleNeueFregatte();
				}
			}	
		}
Aber wie schaffe ich es, daß mir dann z.B. auf einem JLabel in der GUI das Ergebnis von
Java:
ruderboot.bewegen();
ausgegeben wird? Denn mein "BootSimulator" kann ja nicht auf das JLabel meiner GUI zugreifen.
Wenn ich z.B.
Java:
System.out.println(ruderboot.bewegen());
in "erstelleNeuesRuderboot()" schreibe, dann wird das schon in der Konsole ausgegeben, aber
Java:
label.setText(ruderboot.bewegen());
funktioniert natürlich nicht, da "BootSimulator" die GUI-Elemente nicht kennt.

Kann mir da bitte jemand einen Tip geben.

Vielen Dank,
Peter
 
Du musst irgendwie den Zugriff erlauben. Dabei kannst du das Label mit Getter-Methoden verfügbar machen oder eine Setter-Methode in die GUI erstellen, den ein String übergeben werden muss:

Java:
    gui.getLabel().setText("xyz");
    gui.updateLabel("xyz"); // <- Besser
 
in deiner BootSimulaor-Klasse müsstest du bspw dein Ruderboot global deklarieren:

Java:
 public class BootSimulator{

private Ruderboot ruderboot;
.
.
.
public void erstelleNeuesRuderboot() {
        ruderboot = new Ruderboot();
        ruderboot.setKanonenAnz(1);
                ruderboot.bewegen();
    }

public Ruderboot getRuderboot(){
return ruderboot
}

und dann muss deine Ruderbootklasse entsprechende Methoden anbieten, die du für deine GUI-Darstellung brauchst...bspw:

Java:
class ButtonListener implements ActionListener{ 
            public void actionPerformed(ActionEvent e) {
                if(e.getSource() == b1){
                    simulator.erstelleNeuesRuderboot();
                    ruderboot = simulator.getRuderboot();
                    label.setText(ruderboot.getAnzahlKanonen());
                    usw
 
Vielen Dank jgh,

es funktioniert.
Ich habe im "BootSimulator" folgende Methode drinnen:
Java:
public Ruderboot getRuderboot(){
		Ruderboot ruderboot = new Ruderboot();
		ruderboot.setKanonenAnz(1);
		ruderboot.bewegen();
		ruderboot.angreifen();
		return ruderboot;
	}
Die erstelleRuderboot() habe ich mir damit erspart und mit den anderen beiden Bootstypen mach ich es genau so!

Schöne Grüße,
Peter
 

Zurück
Oben