Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

ich hab eine relativ simple Frage für die Wissenden. Ich habe eine Oberfläche mit vielen verschiedenen JLABEL (Beispiel myLabel_1-10).

Aufgrund von verschiedenen Eingaben werden verschiedene Texte / Zahlen in die myLabel mit setText() geschrieben. Nun stelle ich fest, dass ich ein bestimmtes Label korrigieren muss, zum Beispiel myLabel_5.

Ich habe mir jetzt das entsprechende myLabel_5 mit Stringverknüpfungen und Berechnungen ermittelt und die exakte Bezeichnung steht jetzt in einem String LabelName = myLabel_5 (über System.out.printl getestet).

Der Hintergedanke dabei war, dass ich gehofft hatte, mir die Bezeichnung des zu korrigierende JLabel einfach zusammen zu basteln, sodass ich eine mehrfache verschachtelte if Struktur oder switch case vermeiden kann.

Nun ist die Frage, wie kann ich über diesen String LabelName den Inhalt des myLabel_5 mit getText() auslesen?

Ich hoffe mein Anliegen gut genug beschrieben zu haben und bedanke mich schon mal für die Ideen.

Geschrieben

Ich schau mir diese Reflection mal an. Ich muss dazu sagen, dass ich mehr oder weniger Leihe bin und mir das alles gerade versuche selber beizubringen nebenbei.

Ich beschreib das Problem nochmal.

Ich habe 10 JLabel myLabel_1-10. In jedem JLabel schreibe ich mit myLabel_x.setText() Zahlen / Werte rein.

Jetzt stelle ich fest, dass ich in myLabel_5 anstatt eine 10 eine 8 reinschreiben müsste. Ich möchte jetzt eine Korrekturfunktion programmieren, die es mir ermöglicht, jedes beliebige myLabel zu korrigieren - ich nenn die Methode jetzt Korrektur(int LabelNummer).

Den Übergabewert als integer, damit ich mir zusammen bauen kann, welches Label ich jetzt genau verändern will. Ich hab jetzt also einen String KorrekturLabel = myLabel_+Labelnummer. Durch diese Verküpfung steht jetzt in KorrekturLabel myLabel_5.

Ab hier weiß ich dann nicht weiter. Ich hab da meinen String in dem mein zu korrigierendes Label steht, aber wie kann ich jetzt weiter machen mit .setText() oder getText() und falls nötig mit dem Inhalt aus dem Label noch was berechnen und dann erst wieder schreiben.

Ich könnte natürlich auch über den Übergabewert LabelNummer jetzt switch LabelNummer aufbauen und dann case 1, case 2 etc programmieren. Dann hätte ich bei jeder Korrektur diese riesige switch case Struktur oder analog viele if, aber das bläht ja unheimlich auf.

Ich muss dazu sagen, dass ich eine ähnliche switch case Variante schon im Programm habe, da allerdings nur mit 5 Label und in jedem case passiert im Grunde das gleiche mit dem entsprechenden Label. Daher hab ich die Hoffnung, dass irgendwie abkürzen zu können.

Wenn das nicht geht, wie erhofft, kein Problem, dann eben switch case, aber man kann ja mal die Experten befragen. ;-)

Geschrieben

Also erst einmal definierst du die Nummer der Labels nicht im Name des Labels, sondern als Variable in einer davon abgeleiteten Klasse (man kann zwar auch auf den Namen eines Objektes zugreifen, aber wieso unnötig kompliziert wenns auch einfach geht):


public class NrLabel extends JLabel {


    private int nr;


    public NrLabel(int nr) {

        this.nr = nr;

    }


    public int getNr() {

        return this.nr;

    }


}

Dann fügst du die Labels einer ArrayList hinzu (entweder wie her per new oder deine bestehenden Label-Objekte, die du aber dann auch von NrLabel statt JLabel ableiten musst):

private ArrayList<NrLabel> labels = new ArrayList<NrLabel>();

...

labels.add(new NrLabel(1));

labels.add(new NrLabel(2));

labels.add(new NrLabel(7));

labels.add(new NrLabel(44));

labels.add(new NrLabel(123));

Nun kannst du die ArrayList durchgehen (entweder du machst sie als Member oder übergibst sie mit an die Methode):

public void Korrektur(int nr) {

    for(int i = 0; i < labels.size(); i++) {

        if(labels.get(i).getNr() == nr) {

            labels.get(i).setText("Hallo Welt");

            break;

        }

    }

}

Fertig ;)

Geschrieben

Guten Morgen

Das schaut alles recht verständlich aus. Dann verwerfe ich mal meine "Idee" mit der Labelbezeichnung in einem String. Ich probiere das heute mal aus und melde mich, wenn ich fest stecke oder Verständnisprobleme habe.

Vielen Dank!

PS:

Wenn jemand noch eine andere Idee hat, würde ich die gerne auch ausprobieren an der anderen Stelle mit meiner recht "großen" Switch case Struktur

Gast runtimeterror
Geschrieben

So wie pr0gg3r es beschrieben hat ist der übliche Weg. Reflection ist in diesem einfachen Falle völlig fehl am Platz.

Als Variante zur ArrayList (i.A. List) kann man noch mit einer Map (z.B. HashMap<String, JLabel>) arbeiten und anstelle über Nummern mit Strings das JLabel adressieren. Auch das gute alte Array (JLabel[]) erfüllt seinen Zweck, wenn vorher die Anzahl bekannt ist.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...