# Jlabel Text von anderen Klasse aus ändern



## BukkitDEV (4. Okt 2015)

Hallo
Wie kann ich den Text von einem JLabel von einer anderen Klasse aus ändern ?
Danke schon mal im Vorraus
BukkitDEV


----------



## Flown (4. Okt 2015)

Referenz auf das Objekt, in der Klasse eine Methode zum setzen des Textes des JLabels einfügen. `<referenz>.setText(<text>);` fertig!


----------



## BukkitDEV (4. Okt 2015)

Danke
Ich kenne mich mit Java noch nicht sehr gut aus., weshalb ich nicht genau verstehe was du meinst.
Das ist meine GUI Klasse


```
package me.Rechner;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigInteger;

/**
* Created by Admin_Trommer on 01.10.2015.
*/
public class Rechner {
    private JPanel panel;
    private JButton ausrechnenButton;
    private JTextField textField1;
    private JTextField textField2;
    private JLabel ergebniss;
    private JRadioButton Fakultaet;
    private JRadioButton ggT;
    private JRadioButton teilen;
    private JRadioButton zusammenzählenRadioButton;

    public static void main(String[] args) {
       JFrame frame = new JFrame("Rechner");
        frame.setContentPane(new Rechner().panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public Rechner() {
        ausrechnenButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (ggT.isSelected() | Fakultaet.isSelected() | teilen.isSelected() | zusammenzählenRadioButton.isSelected()) {

                    if (!textField2.getText().equalsIgnoreCase("")) {

                        if (Fakultaet.isSelected()) {
                            me.Rechner.Fakultaet.fakultaet(Integer.parseInt(textField2.getText()));
                        }

                        if (ggT.isSelected()) {
                            GGT.ggt(Integer.parseInt(textField2.getText()), Integer.parseInt(textField1.getText()));
                        }

                        if (teilen.isSelected()) {
                            Teilen.Teilen(Integer.parseInt(textField2.getText()), Integer.parseInt(textField1.getText()));
                        }

                        if (zusammenzählenRadioButton.isSelected()) {
                            //Zusammenzählen.zusammenzählen();
                        }

                    } else {
                        JOptionPane.showMessageDialog(null, "Biite erst Zahl eingaben !");
                    }
                }else{
                    JOptionPane.showMessageDialog(null, "Bitte erst Rechenoption auswählen");
                }

            }
        });



        Fakultaet.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ggT.setSelected(false);
                teilen.setSelected(false);
                textField1.setEnabled(false);
                textField1.setText("");
                textField2.setText("");
                zusammenzählenRadioButton.setSelected(false);
            }
        });


        ggT.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Fakultaet.setSelected(false);
                teilen.setSelected(false);
                textField1.setEnabled(true);
                textField1.setText("");
                textField2.setText("");
                zusammenzählenRadioButton.setSelected(false);
            }
        });

        teilen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Fakultaet.setSelected(false);
                ggT.setSelected(false);
                textField2.setEnabled(true);
                textField1.setEnabled(true);
                zusammenzählenRadioButton.setSelected(false);
            }
        });

        zusammenzählenRadioButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Fakultaet.setSelected(false);
                teilen.setSelected(false);
                ggT.setSelected(false);
                textField2.setEnabled(true);
                textField1.setEnabled(true);
            }
        });
    }
}
```

Und das meine andere Klasse von der aus ich den Text von dem Label ergebniss ändern will:

```
package me.Rechner;

import javax.swing.*;

/**
* Created by Admin_Trommer on 03.10.2015.
*/
public class Teilen {
    static int ergebniss = 0;
    public static void Teilen(int a, int b){
        ergebniss = a / b;
        JOptionPane.showMessageDialog(null, a + "/" + b + " = " + ergebniss );
    }
}
```


----------



## Flown (4. Okt 2015)

Ich werde sicher nicht deinen Code durchgehen, aber liefere dir ein lauffähiges Beispiel:

```
public class Test {
	
	public static void main(String... args) {
		B b = new B(new A());
		b.addAndPrint(10, 5);
	}
	
}

class A {
	public void print(int x) {
		System.out.println(x);
	}
}

class B {
	private A a;
	
	public B(A a) {
		this.a = a;
	}
	
	public void addAndPrint(int x, int y) {
		a.print(x + y);
	}
}
```


----------



## BukkitDEV (4. Okt 2015)

Jetzt verstehe ich garnichts mehr :-(


----------



## Flown (4. Okt 2015)

Warum immer gleich mit GUIs und Spielen anfangen, wenn man keine Ahnung hat von den Grundlagen?

Du brauchst dringend Verständnis für OOP und wie man Objekte an ein Anderes weitergibt.


----------



## BukkitDEV (5. Okt 2015)

Wie kann ich das jetzt machen ?


----------



## Joose (6. Okt 2015)

BukkitDEV hat gesagt.:


> Wie kann ich das jetzt machen ?



Flown hat dir schon gezeigt wie sowas in Java normalerweise gemacht wird (im Sinne von OOP).
Leider können wir es dir nicht abnehmen dich mit den Grundlagen von Java vertraut zu machen. Hierzu ist schon Eigeninitiative gefragt.


----------



## Harry Kane (7. Okt 2015)

1. Um zu erreichen, dass von mehreren zusammengehörigen JRadioButtons immer nur einer ausgewählt sein kann, verwendet man eine ButtonGroup.
2. Deine Teilen-Klasse hat nur eine Methode. Diese Methode könntest du auch noch in deine Rechner-Klasse einbauen.
Um es mal etwas grundsätzlicher zu beschreiben:
Wenn du eine Gui-Klasse hast und eine oder mehrere Klassen, die Berechnungen oder allgemein "Services" ausführen, sollte die Service-Klasse nicht die Gui-Klasse oder die UI Elemente der Gui kennen, sondern umgekehrt: Die Gui Klasse kennt die Services und verarbeitet deren Ergebnisse.
Wenn du bei deiner Teilen-Klasse bleiben möchtest, solltest du nicht so verfahren, dass du der Teilen-Klasse eine Referenz auf das JLabel verpasst, und in der Teilen-Methode den Text des JLabels ändert, sondern du rufst in einer geeigneten Methode der Gui-Klasse die Teilen-methode auf und verwendest den Rückgabewert der teilen-Methode 8den du einbauen musst, da die Teilen-Methode aktuell nüscht zurückgibt), um den JLabel-Text zu setzen. Dafür braucht es keine Referenz, weil die Gui-Klasse das JLabel sowieso kennt.


----------



## JavaWolf165 (7. Okt 2015)

BukkitDEV hat gesagt.:


> Jetzt verstehe ich garnichts mehr :-(


Hey, BukkitDEV,
Füge in deine public Rechner das hinzu:


```
public void setJLabelText(String Text){
    ergebniss.setText(Text);
}
```

wenn du das gemacht hast, kannst du mit der Zeile

Rechner.setJLabelText();

den Text aus einer anderen Klasse ändern, indem du in den Klammern den gewünschten Inhalt des JLabels
angibst.

Ich hoffe, ich habe dir geholfen.


----------

