x.setText("") auf JLabel

Status
Nicht offen für weitere Antworten.
M

Malcolm

Gast
Hallo,

mal angenommen ich hab zwei Klassen, in der einen Klasse hab ich unter anderem ein JLabel erstellt. Nun möchte ich gerne den Text dieses JLabels aus der zweiten Klasse heraus mit Hilfe der Methode setText() verändern. Das Problem ist nun, dass ich nicht weiß, wie ich aus einer anderen Klasse heraus auf diese JLabel zugreifen kann. Wäre super wenn mir einer helfen könnte.

Gruss Malcolm
 

Griffin

Bekanntes Mitglied
Also auf keinen Fall solltest du das JLabel public machen, so könntest du zwar darauf zu greifen aber andere auch und somit Fehler in dein Programm einbringen. Besser:
Code:
public class ABC {
     private JLabel lbl = new JLabel(); //ohne text

     public JLabel getLabel() {
            return this.lbl;  //gibt ein Label zurück
      }
}

public class XYZ {
     private JLabel  lbl;

     public XYZ() {
          //Ich mach das mal im Konstruktor
          ABC abc = new ABC();
          this.lbl = abc.getLabel();
          lbl.setText("Der Label Text");
     }
}
 
M

Malcolm

Gast
Hallo,

hab den Quellcode getestet. Ich bekomme da eine NullPointerExcetion. Kann ihr mir sagen woran das liegen kann?
 

Sky

Top Contributor
Die folgende Lösung kapselt das ganze noch besser; so kann man von 'außen' nur noch den Text lesen und schreiben und alle anderen Änderungen am JLabel sind tabu:

Code:
public class ABC {
  private JLabel m_ABCLabel = new JLabel();

  public String getABCText() {
    return this.m_ABCLabel.getText();
  }

  public void setABCText(String s) {
    this.m_ABCLabel.setText(s);
  }

}

public class XYZ {
  public XYZ() {
    //Ich mach das mal im Konstruktor
    ABC abc = new ABC();
    abc.setABCText("Der Label Text");
  }
}
 

dotlens

Top Contributor
wieso ist das besser geschützt? vorher war der Label public, jetzt sind beide Methoden public.
versteh ich nicht....

EDIT: oder ist das weil eine instanz davon erzeugt wird, und auf diese dann nicht mehr zugegriffen werden kann von aussen? *idee bekommen*
 

Sky

Top Contributor
Also vorher konnte man auf alle öffentlichen Methoden eines JLabels zugreifen (z.B. auch setLocation, setBackground usw.). I. d. R. ist es aber nicht gewollt, dass derartige Objekt-Eigenschaften durch andere Klassen geändert werden sollten.

M. E. sollte Änderungen an GUI-Elemente durch die GUI-Klasse gekapselt sein. Und durch oben vorgeschlagenen Ansatz sind wirklich nur die Eigenschaften änderbar, die auch zur Verfügung stehen sollen für andere.
 

dotlens

Top Contributor
leuchted mir ein :D

aber wenn nichts an dem Label geändert werden muss, macht es dann auch sinn eine methode getLabel() zu schreiben?

frage das, weis mein GUI bilder das gemacht hat, und ich das sinnlos fand...
 

dotlens

Top Contributor
also mit nichts geändert werden muss hab ich eigentlich gemeint, dass von aussen nichts geändert werden muss :D

hab erst jetzt gemerkt dass mein satzt nicht so verständlich war...
 

CelikBlek

Bekanntes Mitglied
hallo,
also was sky80 gemacht ist vollkommen richtig. dadurch sind die methoden gesperrt wie es oben auch erklärt ist.
nur die beiden notwendigen methoden werden nach aussen sichtbar. so sollte es auch sein.
was ich eigentlich meine ist, dass es schon sinnvoll ist so eine methode zu schreiben, weil man ja im Laufzeit irgendwelche JLabeltexte verändern will, aber nicht die Farben oder Platzierung usw.. Daher ist es die optimale Lösung meiner Meinung nach. Oder?
Gruss
 

dotlens

Top Contributor
ja klar bin ich deiner meinung, aber realistischer weise: was bringt es jemandem wenn er meinen label verändert und ihn dann anschauen kann...
 

Sky

Top Contributor
dotlens hat gesagt.:
ja klar bin ich deiner meinung, aber realistischer weise: was bringt es jemandem wenn er meinen label verändert und ihn dann anschauen kann...

Ich denke hier stellt sich nicht die Frage nach dem Nutzem sondern nach einem nach OOA/OOD/OOP-sauberem Design von Klassen.
 

CelikBlek

Bekanntes Mitglied
sky80 hat gesagt.:
Ich denke hier stellt sich nicht die Frage nach dem Nutzem sondern nach einem nach OOA/OOD/OOP-sauberem Design von Klassen.
genau das meine ich :) ist schon klar, dass so gut wie niemand kommt und versucht deinen JLabel zu verändern.
Es geht nur darum das "property" Prinzip zu beachten. Regel besagt ja auch, dass jede Klasse so wenig wie möglich von den anderen kennen soll.
 

Sky

Top Contributor
Wenn ich mehrere Labels o.ä. habe mache ich sowas in der Art:

Code:
myObject.set( iObjId, sValue ); // iObjId ist ein ein-eindeutiger Schlüssel für das zu ändernde Objekt und sValue ist der neue Wert.

Dies ist das Prinzip, dass man einem Objekt mittels einer Nachricht über Veränderungen informiert. Alle Nachrichten laufen hierbei über immer die gleich Schnittstelle.

Vorteil: Wenn sich die GUI ändert so hat dies keinen Einfluss auf die anderen Klassen. Es müssen nur entsprechende Änderungen in der 'set'-Methode gemacht werden.

EDIT: Die Objekt-ID wird natürlich als Konstante in einem Interface abgelegt. :)
 

CelikBlek

Bekanntes Mitglied
habe ich nicht richtig verstanden. wie meinst du es denn? myObject? könntest du es nochmal kurz erläutern?
 

Sky

Top Contributor
Nicht schön, aber kurz zum Verständnis:

Code:
public class MyObject {
  private JLalel m_Label1;
  private JLabel m_Label2;
  
  ...

  public void set( int iObjId, String sValue ) {
    if ( iObjId == 1 ) { // eigentlich eine Konstante
      m_Label1.setText( sValue );
    } else if ( iObjId == 2 ) { // eigentlich eine Konstante
      m_Label2.setText( sValue );
    } else {
       ...
    }
  }

}
 

dotlens

Top Contributor
nein, wenn du einmal 20 labels hast und sonstige objekte kann musst du nicht 50 setter und getter methoden schreiben, auserdem musst du bei änderungen nur die settermethode ändern, und die konstanten und die 2 te klasse kannst du so lassen wie sie ist...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
A Minimalestopuhr: JLabel.setText() durch eigenes Event ändern AWT, Swing, JavaFX & SWT 6
L JLabel Methode setText funktioniert nicht AWT, Swing, JavaFX & SWT 5
S Swing JLabel.setText und Multithreads AWT, Swing, JavaFX & SWT 5
E Swing JLabel ändert seine Position nach setText AWT, Swing, JavaFX & SWT 2
L JLabel.setText() AWT, Swing, JavaFX & SWT 8
T JLabel.setText() funktioniert erst nach repaint() etc.? AWT, Swing, JavaFX & SWT 4
M JLabel und setText(); AWT, Swing, JavaFX & SWT 4
Z jLabel.setText("Name: " + x.getName()); --> AWT, Swing, JavaFX & SWT 6
P Fehlerhafte Darstellung bei JLabel.setText AWT, Swing, JavaFX & SWT 2
W JEditorPane textausrichtung nach settext funktioniert nicht mehr AWT, Swing, JavaFX & SWT 11
zhermann NullPointerException bei Label.setText() AWT, Swing, JavaFX & SWT 5
C JavaFX mit .setText() befülltes Textfield liefert anschließend mit .getText() den ursprünglichen Wert? AWT, Swing, JavaFX & SWT 1
J Swing JTextpane aktuallisiert nicht den setText? AWT, Swing, JavaFX & SWT 9
K JavaFX RadioButton.setText() AWT, Swing, JavaFX & SWT 11
Z Window Builder - Labels mit setText befüllen AWT, Swing, JavaFX & SWT 11
C JTextPane scrollt mit setText() immer nach oben AWT, Swing, JavaFX & SWT 2
A Textfeld.append/.setText ohne Funktion AWT, Swing, JavaFX & SWT 2
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
A editable JTextField & setText AWT, Swing, JavaFX & SWT 2
P Swing JtextArea füllen mit setText AWT, Swing, JavaFX & SWT 7
J Swing JTextField reagiert nicht auf .setText(); AWT, Swing, JavaFX & SWT 24
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
G Menü verschwindet durch .setText() AWT, Swing, JavaFX & SWT 4
C Swing TableCellRenderer: setText() vs. setIcon() AWT, Swing, JavaFX & SWT 5
T Swing setText()-Methode Funktioniert nicht AWT, Swing, JavaFX & SWT 7
E JTextPane setText ignoriert \n AWT, Swing, JavaFX & SWT 6
A Swing JFrame vergrößert sich immer bei setText() eines Labels AWT, Swing, JavaFX & SWT 3
B AWT Problem bei setText() AWT, Swing, JavaFX & SWT 5
S [Button] setText("String") AWT, Swing, JavaFX & SWT 5
S Swing jTextPaine kein Zeilenumbruch nach setText() AWT, Swing, JavaFX & SWT 9
T Von JMenuItem setText auf JButton AWT, Swing, JavaFX & SWT 2
B setText() auf TextField mit Document AWT, Swing, JavaFX & SWT 2
X JTextArea Text ausgeben mit setText(a) aber wie? AWT, Swing, JavaFX & SWT 3
G Methode setText AWT, Swing, JavaFX & SWT 4
B Label mit setText geschriebener Text wird nicht angezeigt AWT, Swing, JavaFX & SWT 9
Z Die ausgabe.setText(b.getisbn()); überschreibt sich jedesmal AWT, Swing, JavaFX & SWT 4
V Null Pointer Exception bei JTextField setText AWT, Swing, JavaFX & SWT 25
D setText? AWT, Swing, JavaFX & SWT 4
S JEditorPane setText() Problem mit String übergeben AWT, Swing, JavaFX & SWT 3
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
DaCrazyJavaExpert Swing JLabel Klickanimation AWT, Swing, JavaFX & SWT 4
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
T JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
F Abgeleitetes JLabel AWT, Swing, JavaFX & SWT 16
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
S jLabel HTML Formatierung AWT, Swing, JavaFX & SWT 2
J Statisches JLabel adden AWT, Swing, JavaFX & SWT 4
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
E JLabel aus Runnable ändern AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben