Datentypen String-Ausgabe in jLabel

winzik77

Mitglied
Mein erstes Posting ...
Ich bitte um Hilfe bei der Ausgabe der ungerade bzw. geraden Zahlen bis 100 im
jLabel1. Mein Problem ist dass nur die letzte Zahl ausgegeben wird, ich jedoch gerne
alle fortlaufenden gerade bzw. ungeraden Zahlen im jLabel1 ausgeben möchte.
Vorab schon mal Danke!

Java:
package javaswingapplication13;

/**
 *
 * @author winzik77
 */
public class NewJFrame extends javax.swing.JFrame {
    /**
     * Creates new form NewJFrame
     */
    public NewJFrame() {
        initComponents();
    }
...                   
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        int gerade = 0;
        while (gerade<=100) {
        String stringgerade = String.valueOf(gerade);
        jLabel1.setText(stringgerade);
        gerade += 2;
        }
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        int ungerade = 1;
        while (ungerade<=100) {
        String stringungerade = String.valueOf(ungerade);
        jLabel1.setText(stringungerade);
        ungerade = ungerade+2;
        }
    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        jLabel1.setText("");// TODO add your handling code here:
    }
 
ich glaube du solltest es evtl mal mit einer for schleife versuchen, wenn du eine ausgabe like


Java:
0
1
2
3
4
5
//oder
0123456789

haben möchtest

Java:
int gerade = 0;
while (gerade<=100) 
{
String stringgerade = String.valueOf(gerade); 
jLabel1.setText(stringgerade);
gerade += 2;
}

//Deine While wird beim klick durchlaufen und setzt dein label auf den letzen wert, in dem fall 100
 
Zuletzt bearbeitet:
Anstatt von
Code:
label.setText(newText);
musst du
Code:
label.setText(label.getText() + newText);
schreiben.

Bei der 1. Variante wird einfach der neue Text in das jlabel geschrieben, beim 2. Mal wird der alte text genommen, und an ihn der neue Text hintendrann gehängt
 
wenn ich dein code in der Kommandozeile ausgebe bekomme ich folgende ausgabe :

Java:
02468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100

ich vermute mal in deinem JLabel steht nur die 100 ?
 
ja korrekt. die schleife hat in der konsolen Variante einwandfrei funktioniert. das Problem ist erst durch die string konvertierung fürs jlabel aufgetaucht.
 
Zuletzt bearbeitet:
wie mein vorposter schon geschrieben hat , wird der String in deinem JLabel solange überschrieben wie die Abbruchbedingung noch nicht erreicht ist , demnach setzt der dein String nur auf den letzten Wert

hast du das schonmal versucht ?
Java:
public class Test
{
	public static void main(String[]args)
	{
		String a="";
		ArrayList<String> list= new ArrayList<String>();
		
		for (int i = 0; i <=100; i+=2) // zählt je durchlauf i+2 und fügt das ergebnis der list hinzu
		{
			String f = String.valueOf(i);
			list.add(f);
		}
		for ( String b : list) // iteriert über alle elemente in list und fügt sie + a zusammen
		{
			a += b;
		}
		System.out.println(a); // hier dann setText anstelle von Sysout.
	}
}
//Ausgabe des strings ist dann 

02468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100

Der String "a" lässt sich dann auch nach vorliebe formatiert ausgeben , insofern du das möchtest "a" wäre quasi dann dein String "stringGerade"
 
Zuletzt bearbeitet:
Danke, ich habe mit Deiner Vorgabe die Ausgabe korrekt hinbekommen.
Gibt es noch eine Möglichkeit die Ausgabe vertikal anzuordnen oder durch ',' zu trennen?
Ich habe verschiedene Sachen probiert (html, %n, \n, ...) hat leider nichts funktioniert.:autsch:
Danke, lg winzik
 
Java:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        String ungerade="";
        ArrayList<String> list = new ArrayList<>();
        jLabel1.setText("");

        for (int i = 1; i<=100; i+=2)
        {
            String f = String.valueOf(i);
            list.add(f);
        }
        for ( String b : list)
        {
            ungerade +=b;
        }
        String ausgabe = String.format("%s"+"%n",ungerade);
        jLabel1.setText(jLabel1.getText() + ", " + ausgabe);
    }
Ich bekomme die Ausgabe
, 135791113 ... 99
 
Zuletzt bearbeitet:
Java:
        String ausgabe = String.format("%s"+"%n",ungerade);
        jLabel1.setText(jLabel1.getText() + ", " + ausgabe);

Das wird mit deiner formatierung auch nicht funktionieren, Zeilenumbrüche werden so
formatiert.
Java:
"\n"

Also am einfachsten machste es dir wenn du folgendes schreibst, dies setzt hinter jede iteration in der list einen Zeilenumbruch

Java:
for (String a : list)
{
  ungerade += a + "\n"; // <<--- Speichert in jeder iteration der list einen Zeilenumbruch mit
}

Das erzeugt dann auch diese ausgabe

Java:
0
2
4
6
8
usw.
 
btw

Java:
 jLabel1.setText(jLabel1.getText() + ", " + ausgabe);

das hier kann nur einmal ein "," ausgeben, da du ja die setText methode auserhalb der for-schleife aufrufst, sonst müsste sich ja dein JLabel die ganze zeit aktualisieren um eine ähnliche ausgabe hinzubekommen :idea:

wie gesagt wenn du z.b noch ein komma hinter jeder zahl haben willst realisiere diesen schritt gleich in der for schleife und speicher dieses mit

Java:
for(String a : list)
{
  ungerade += a + "," + "\n"; //<<- nach jeder zahl wird durch komma getrennt und es folgt ein Zeilenumbruch
}
 

Neue Themen


Zurück
Oben