Label aus anderer Klasse aktualisieren.

danielmueller1985

Grünschnabel
Hallo,

habe eine Frage.
Ist es möglich ein jLabel aus einer anderen Klasse über setText(); zu bearbeiten?

Habe ein Form mit einem JPanel und darauf liegt das JLabel. Nun wird von dieser Klasse, die das Formular beschreibt eine andere aufgerufen die etwas im Hintergrund macht. Nun soll das JLabel aktualisiert werden. In der anderen Klasse läuft eine Schleife, die jenachdem mind. 1mal bis max.50mal läuft. So soll beim jeden durchlaufen das Label aktualisiert werden damit der Benutzer sieht dass etwas passiert.

Nun hab ich bereits rumprobiert.

Im Formular hab ich eine Methode erstellt die einen String erwartet und nur den Inhalt des JLabels aktualisiert:
Code:
public void setStatusLabel(String newStatus) {
        lbl_status.setText(newStatus);
        lbl_status.paintImmediately(lbl_status.getVisibleRect()); 
    }

Innerhalb des Formulars funktioniert das einwandfrei. Aber über die andere Klasse nicht. Ich instanziere das form und nutze die Methode, es kommt kein Fehler, aber auch keine Änderung.


Habe das JLabel dann mal auf public gesetzt, so konnte ich das in der anderen Klasse direkt ansprechen und mit setText(„“); aufrufen. Aber auch hier ohne Erfolg.

Jemand eine Idee wie ich das machen kann?

Vielen dank für Hilfe :)

Gruß Daniel
 
"Kennt" deine neue Klasse die alte Klasse mit dem JLabel? Poste mal Code von der Klasse, die die setStatusLabel Methode aufruft.
 
Ich denke schon dass beide sich kennen.

so sieht die Klasse verkürzt aus:

Code:
package meintest2;

import java.io.*;
import jcifs.smb.*;

/**
 *
 * @author rw#p051
 */
public class copyFile   {
    
    int copyType;
    String msg;
    boolean escKeyPressed = false;
    
    public boolean copyToMarkt() {
           boolean is_copy = false;
           
          // hier nun die andere Klasse
         jobs job = new jobs();
         job.setStatusLabel("Neuer Text");

         return is_copy;
    }
}

Die andere Klasse die diese Methode aufruft heißt jobs().
Nun wo das Label auf public steht hab ich auch probiert mit
Code:
job.lbl_status.setText("public Text");
den Text zu ändern, leider auch hier kein Erfolg. Aber immer ohne Compiler Fehler.

Gruß
 
Moin,

Habe ein Form mit einem JPanel und darauf liegt das JLabel. Nun wird von dieser Klasse, die das Formular beschreibt eine andere aufgerufen die etwas im Hintergrund macht. Nun soll das JLabel aktualisiert werden.
Verstehe ich das richtig, dass Du die Klasse Jobs (Klassennamen bitte immer groß schreiben) erst instanziierst, nachdem Deine GUI aufgerufen wurde?

Ich sehe nämlich nur diese Zeilen:
Java:
Jobs jobs = new Jobs();
jobs.setStatusLabel("Text");
Das klappt dann ja nicht, da die Klasse die aktuelle Instanz Deiner GUI gar nicht kennt.
Demnach würde ich raten, dass Du der Klasse CopyFile einfach einen Parameter mitgibst, der in diesem Fall Deine GUI ist.

Java:
class CopyFile{
  private Jobs jobs;

  public CopyFile(Jobs newJobs){
    jobs = newJobs;
  }
}

Und schön könntest Du von überall aus der Klasse auf jobs.setStatusLabel zugreifen und es würde sich auch entsprechend in der GUI ändern.

Gruß,
Xan
 
Hi,

also die Klasse wird aufgerufen nachdem das GUI geladen ist. Das ist richtig.
Der Constructor von CopyFile hat keine Parameter von Jobs.

Das heißt dann wenn ich die Klasse CopyFile in Jobs instanziere gebe ich als Paramter this mit?
quasi so:
Code:
CopyFile cf = new CopyFile(this);

Dann hab ich ja das GUI mit übergeben.

Ich werde es mal ausprobieren :)
 
ja gut, aber mit
Code:
Jobs jobs = new Jobs();
jobs.setStatusLabel("Text");
hab ich alles auswählen können, also beim tippen des punktes wird mir dann alles vorgeschlagen.

Hab das jetzt mal ausprobiert, aber leider hat das nicht funktioniert.

Hab eben noch was dazu gelesen dass das nicht aktualisiert werden könnte wenn der thread, der das aufgerufen hat noch läuft, denn in einer Schleife wird die copy Methode aufgerufen die wiederum zum kopieren ne Schleife enthält.
Nun hab das ganze in einen extra Thread ausgelagert und schon funktionierts :)

Vielen Dank für die Hilfe :)

Gruß
 
Versuchs mal so:


Die Klasse, die gerufen wird, besitzt eine Variable theLabel.
und natürlich einen setter mit dem man das label setzen kann.

Code:
public class B{
private JLabel theLabel = null;

public void setTheLabel(JLabel aLabel) {
theLabel = aLabel;
}
}

Dieses Label wird von der aufrufenden Klasse mit dem richtigen
Label Objekt gefüllt
Code:
public class A{
private JLabel lbl = new JLabel();
.....
.....
B newClass = new B();
newClass.setTheLabel(lbl);
}
 
Zuletzt bearbeitet:
Zurück