Tanelorn.net

Medien & Phantastik => Multimedia => Multimedia - Software & Betriebsysteme => Thema gestartet von: Imion am 4.08.2007 | 18:40

Titel: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Imion am 4.08.2007 | 18:40
Vorsicht: Java-Vollnoob/Mit-Programmieren-Auch-Sonst-Nicht-Allzu-Viel-Am-Hut.

Ich versuche in einer Schleife verschiedene Labels im GUI zu 'beschriften'

Also zB. bei i=1 Label1, bei i=2 Label2 usw.

In VBasic ging das mit Label&i (IIRC). Jetzt frag ich mich, ob das auch mit Java irgendwie geht.

EDIT: Vielleicht hab ich mich missverständlich ausgedrückt.
Ich will nicht die Variable, die im Label ausgegeben wird verändern, sondern ich will ein anderes Label ansprechen, das dann die jeweilig Variable zeigen soll.
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Zero am 4.08.2007 | 18:50
das müsste
label + i
sein...
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Imion am 4.08.2007 | 19:07
Also Label+i.setText() mag Netbeans irgendwie gar nicht.
Andere Ideen?
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Zero am 4.08.2007 | 19:33
label = "label" + i


[edit] aach quatsch... so:
label.setText("label" + i)


[edit2] jetzt erst den kommentar gelesen... das geht so nich... da musst du den array für nehmen das dann durch laufen wird...
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Imion am 4.08.2007 | 19:42
Vielleicht bin ich jetzt zu blöd, aber irgendwie versteh ich dich momentan nicht.
Ich stell mal die Schleife rein.


Stehe aber immer noch vor dem Problem, die Einzelnen Werte im Array jeweils einem Label zuzuordnen.
Sprich:
wert[0] in Label1
wert[1] in Label2
usw.


            orbits[0]=firstplanetorbit;

while(orbits[i]>innerlimit)
            {
                i++;
               
                OrbitalSpacing();                                /*Hier wird orbitalspacingratio ermittelt*/
                orbitstemp=orbits[i-1]/orbitalspacingratio;
               
                if (orbitstemp>innerlimit)
                    orbits[i]=orbitstemp;
               
                OrbitLabel.setText(""+orbits[i]);            /*Hier sollten die verschiedenen Label beschriftet werden*/
               
               
            }
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Zero am 4.08.2007 | 20:03


            orbits[0]=firstplanetorbit;
            List orbitlabelarray = new ArrayList();

while(orbits[i]>innerlimit)
            {
                i++;
               
                OrbitalSpacing();                                /*Hier wird orbitalspacingratio ermittelt*/
                orbitstemp=orbits[i-1]/orbitalspacingratio;
               
                if (orbitstemp>innerlimit)
                    orbits[i]=orbitstemp;
               
                orbitlabelarray[i] = (new OrbitLabel()).setText(""+orbits[i]);            /*Hier sollten die verschiedenen Label beschriftet werden*/
               
               
            }
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Imion am 4.08.2007 | 20:21

            orbits[0]=firstplanetorbit;
            ArrayList orbitlabelarray = new ArrayList();

while(orbits[i]>innerlimit)
            {
                i++;
               
                OrbitalSpacing();                                /*Hier wird orbitalspacingratio ermittelt*/
                orbitstemp=orbits[i-1]/orbitalspacingratio;
               
                if (orbitstemp>innerlimit)
                    orbits[i]=orbitstemp;
               
                orbitlabelarray[i] = (new OrbitLabel()).setText(""+orbits[i]);            /*Hier sollten die verschiedenen Label beschriftet werden*/
               
               
            }


gibt mir ein 'array required, but java.util.ArrayList found' und ein 'cannot find symbol: class OrbitLabel'  für 'orbitlabelarray[ i] = (new OrbitLabel()).setText(""+orbits[ i]);' zurück.

Da ich mich erst seit 2 Tagen mit Java beschäftige kann ich mit der Fehlermeldung recht wenig anfangen.
Trotzdem danke für die Mühe.
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: avakar am 4.08.2007 | 20:51
Ersetze
orbitlabelarray[i] = (new OrbitLabel()).setText(""+orbits[i]); durch
orbitlabelarray.add((new OrbitLabel()).setText(String.valueOf(orbits[i])));
Ausserdem musst du die Klasse OrbitLabel importieren.
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Imion am 4.08.2007 | 20:58
(...)
Ausserdem musst du die Klasse OrbitLabel importieren.

OrbitLabel0 bis OrbitLabel12 sind allerdings jLabel auf der GUI und keine Klassen. Wüsste nicht wie man die importieren sollte, lasse mich allerdings gern eines Besseren belehren.
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: avakar am 4.08.2007 | 21:08
Wie keine Klasse? Du verwendest OrbitLabel aber wie ein normales Object in deinem Code, also musst du es auch importieren (genau das sagt die Fehlermeldung "cannot find symbol: class OrbitLabel").
Oder sind OrbitLabel0, OrbitLabel1 usw. Variablennamen für Objekte der Klasse JLabel?
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Imion am 4.08.2007 | 21:15
in meinem Originalcode stand
OrbitLabel.setText(""+orbits[i]);
hier wollte ich, dass sich die Label je nach 'i-Stand' verändern.
Also die Variable orbits[0] in OrbitLabel0, die Variable orbits[1] in OrbitsLabel1 usw. ausgegeben wird.
(Bei OrbitLabel0 usw. handelt es sich um Labels, die auf der GUI schon vorhanden sind, und ihrer Füllung mit Text harren.)

Erst bei Zero ist es zum


                orbitlabelarray[i] = (new OrbitLabel()).setText(""+orbits[i]);         

geworden.
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: avakar am 4.08.2007 | 21:23
Dann solltest du die OrbitLabels erstmal in ein Array stecken. Etwa so
List theLabels = new ArrayList(13);
theLabels.add(0, OrbitLabel0);
theLabels.add(1, OrbitLabel1);
    ...
theLabels.add(12, OrbitLabel12);

Danach kannst du in einer Schleife die Labels mit dem Text versehen, etwa so
for (int i=0; i<13; i++) {
    // berechne hier irgendwas

    ((JLabel) theLabels.get(i)).setText(String.valueOf(orbits[i]));
}

OrbitLabel.setText(""+orbits[i]); sieht übrigens nach einer Klassen- oder Objektmethode aus, daher ging Zero wohl davon aus, dass es OrbitLabel eine Klasse ist.
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Imion am 4.08.2007 | 21:32
(...)

Juchu, so klappts. Danke Dir!
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Zero am 4.08.2007 | 21:59
Zitat
OrbitLabel.setText(""+orbits[i]); sieht übrigens nach einer Klassen- oder Objektmethode aus, daher ging Zero wohl davon aus, dass es OrbitLabel eine Klasse ist.

jup... weil wegen der großschreibung und so...
Titel: Re: [Java] In Schleife verschieden Labels 'beschriften'
Beitrag von: Darkwalker am 14.09.2007 | 13:43
Eine (etwas komplexere) Alternative:

+ Gibt den Labes im Quellcode einen Namen (labelxxx.setName(labelname)

+ Schreibe eine Methode die über alle Children eines Panels läuft und prüft, ob es ein JLabel ist

+ Wenn ja, hole den Namen und benutze den, um den passenden Text zu holen

+ Den Text speicherst du am besten in einer Properties-Datei und schiebst ihn im Programm in ein Resource-Bundel

+ Über den selben Mechanismus kannst du auch Kinder von JTextField etc. mit Begrenzungen und Prüfungen versorgen

Das ist zumindest die Lösung die man bei Internationalisierungen von Programmen in der Anwendung findet. Klappt in der Praxis nahtlos und für den Benutzer völlig transparent.