Tanelorn.net
Medien & Phantastik => Multimedia => Multimedia - Software & Betriebsysteme => Thema gestartet 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.
-
das müsste
label + i
sein...
-
Also Label+i.setText() mag Netbeans irgendwie gar nicht.
Andere Ideen?
-
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...
-
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*/
}
-
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*/
}
-
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.
-
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.
-
(...)
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.
-
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?
-
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.
-
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.
-
(...)
Juchu, so klappts. Danke Dir!
-
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...
-
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.