Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

  • Autor

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. ;-)

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 ;)

  • Autor

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.