Globale Variable aus anderer Klasse ändern...

Jackii

Mitglied
Hallo alle,

ich möchte gleich anmerken das ich die Suchfunktion genutz habe aber leider nichts passendes gefunden habe...🙁

Also ich möchte gerne folgendes tun:
Ich habe eine Klasse (hier mal Start.java) die den benutzer eine Auswahl an bildern bietet. Der Benutzer kann sich ein Aussuchen und per Button wird er weitergeleitet....Klasse 2 (hier Spiel.java) wird gestartet. Dort soll in einem Label das Bild angezeigt werden.

PROBLEM: ;(
Wie kann ich das Bild in die zweite klasse laden. (Das bild liegt in einer Globalen variable gespeichert in der Klasse 1, Das JLabel in klasse 2 ist public)

Hier mal ein paar Code schnipsel zum verdeutlichen:
Klasse 1
Java:
public class Start extends javax.swing.JFrame {
  public static JLabel SteinbildX = new JLabel(new ImageIcon("image/X.jpg")); 
....
  public static void leseEingabeAus() {
        //Spieler 1
        if(jComboBox1.getSelectedItem() == "X") {
            Sp1Stein = "X";
            System.out.println("Spieler1: waehlte X");
            //hier soll das bild uebergeben werden...
        }
        .....
  }
....
}

Klasse 2
Java:
public class Spiel extends javax.swing.JFrame {
   public static jLabel1 bild;
....
}

die ... stehen für Kürzung des Quellcodes
Danke schonmal für eure Hilfe 😉
 
aiaiaiai, der Code Schreibt gradezu nach anständiger Formatierung 😉

Java:
 public static JLabel SteinbildX = new JLabel(new ImageIcon("image/X.jpg"));

Da du dieses JLabel als Static deklarierst ist es für jedes erzeugte Objekt der Klasse Start gleich belegt.

1. Attribute einer Klasse sollten auch nur für diese sichtbar sein (private)
2. man sollte Klassen nur erweitern insofern man ihnen Funktionalität hinzufügt
3. Variablen schreibt man in Java lowerCamelCase ( z.B
Code:
steinBildX
)
4. Erstelle eine Konstantensammlung wenn du das Bild allen Klassen zugänglich machen möchtest
5. erstelle öffentliche Getter die dir diese Attribute liefern, in deinem Fall :

Java:
public class Start extends JFrame{
 private JLabel steinBildX;

 public Start(){
   steinBildX = new JLabel(new ImageIcon("image/x.jpg"));
 }

 public JLable getImageLable()         {return this.steinBildX;}
}

nun kannst du , insofern eine Instanz dieser Klasse in deiner anderen klasse existiert auf diesen Getter zugreifen

Java:
public class Spiel{

 private JLabel label;

 public Spiel(){
   Start s = new Start();

   this.label = s.getImageLabel();
 }
}

das ganze funktioniert natürlich auch statisch :

Java:
public class Start extends JFrame{
 public static JLabel steinBildX = new JLabel(new ImageIcon("image/x.jpg"));

 public Start(){}

 public static JLable getImageLabel()         {return steinBildX;}

und der aufruf in einer anderen Klasse:

Java:
public class Spiel{

 private JLabel label;

 public Spiel(){
   this.label = Start.getImageLabel();
 }
}
 
Zuletzt bearbeitet:
Leider funkt es nicht so wie erhofft....

also ich hab ja:
Java:
public class Start extends javax.swing.JFrame {
    ...
    public static JLabel steinBildX = new JLabel(new ImageIcon("image/X.jpg")); 
    public static JLabel steinBildO= new JLabel(new ImageIcon("image/O.jpg"));

    ...                  

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
       ...
    }                                     

     public static JLabel getImageLabelX() {
         return steinBildX;
     }
     public static JLabel getImageLabelO() {
         return steinBildO;
     }
     ...
   public static void leseEingabeAus() {
    ...
   }

    public static boolean pruefeSpielstein(String Sp1, String Sp2) {
        boolean ergebnis = false;
        if(Sp1.equals(Sp2)) {   //pruefe auf gleichheit der Bilder
            ...
            ergebnis = false;
        } else {
            ...
            ergebnis = true;
            //Starte die Klasse Spiel()
            Spiel.start();
            new Start().setVisible(false);
        }
        return ergebnis;
    }
    ...                 
}
und
Java:
public class Spiel extends javax.swing.JFrame {
   ...
   public static void start() {
        Spiel.jLabel3 = Start.getImageLabelX();
        new Spiel().setVisible(true);  //um das neue Fester zu starten
    }
    ...
}

wenn ich das so mache verändet sich jLabel3 aber nicht...kann ich nicht direkt in der Klasse Start.java sagen das ich den "Wert" vom bild übergeben möchte???
 
Zuletzt bearbeitet:
Spiel.jLabel3 = Start.getImageLabelX();

wie soll das auch funktionieren wenn du die Variable vorher nicht deklarierst ?

Spiel.jLable3 was soll das für ein Konstrukt sein ?

Du hast hier ja keine innere Klasse , demnach kannst du auch nicht über

Code:
Spiel.
auf irgendwelche Variablen zugreifen , dies geht wie gesagt nur beim zugriff auf Konstruktoren von inneren Klassen wie es z.B oftmal in der Graphics2D API der Fall ist.

Wenn dann so :
Java:
public class Spiel extends javax.swing.JFrame {
 
    private JLabel jLabel3;

   public static void start() {
        this.jLabel3 = Start.getImageLabelX();
        new Spiel().setVisible(true);  //um das neue Fester zu starten
    }
    ...
}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben