# Labelinhalt neu erzeugen ?



## Twanger (3. Apr 2008)

hi leute,

ich möchte gerne wissen, wie es möglich ist den text eines labels, das auf dem bildschirm ausgegeben wurde ändern kann. in meinem programm tipp ich 5 zahlen ein, klick auf berechnen und dann werden sie ausgegeben. wenn ich z. B. buchstaben eintipp wird eine fehlermeldung ausgegeben, tipp ich dann wieder zahlen ein und geh auf "berechnen" dann wird das ergebnis natürlich nicht mehr ausgegeben, da auf der stelle bereits die fehlermeldung steht. 

hier der code:



```
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.awt.print.*;
import java.lang.Double;


public class MultiGUI extends Applet implements MouseListener,WindowListener,ActionListener,ItemListener,MouseMotionListener {

double zahl;
public static TextField textfield;
public static TextField textfield2;
public static TextField textfield3;
public static TextField textfield4;
public static Font meinfont;
public static Label label;
public static Label label2;
public static Label label3;
public static Label label4;
public static Label label5;
public static Button button;
public static Frame f;
public static Applet a;
public static Checkbox r1;
public static Checkbox r2;
public static CheckboxGroup radio;
public static boolean mwst=false;


	public static void main(String[] args) {
		Frame f = new Frame("Kalkulator");
		f.setSize(800,350); // Größe ändern (breite, höhe)
		f.setBackground(Color.GREEN);
		f.setVisible(true); // Fenster sichtbar machen

		a = new MultiGUI(); // Applet-Context holen
		f.add(a); // Applet-Eigenschaften zum Fenster hinzufügen

		// "Schließen"-Knopf:
		// Verweis auf die in dieser Klasse definierten WindowAdapter-Mehoden
		f.addWindowListener((MultiGUI)a);

		// Maus-Events,
		// Verweis auf die in dieser Klasse definierten MouseAdapter-Mehoden
		f.addMouseListener((MultiGUI)a);

		a.init(); // paint(g); wird hier nicht gebraucht.
		a.start();
		f.setVisible(true); // Fenster und Buttons sichtbar machen
	} // Ende Applikation, ab hier Applet-Stuff.


	// paint() entspricht dem "main" bei Applikationen, wird aber
	// _jedesmal_ beim Zeichnen/Refresh des Applet aufgerufen.
	// Graphics g wird vom Browser geliefert und hat die Größe des
	// width=... und height=... Kontextes im APPLET-Tag in der
	// HTML-Datei.
	
	public void paint(Graphics g) { } // Hier ausnahmsweise leer.

	// init() wird nur einmalig zu Beginn aufgerufen
	public void init() {
		// Layout in 2 Zeilen a 4 Spalten
		//setLayout(new GridLayout(2, 4));

		setLayout(null); // freies Layout mit setBounds()

		meinfont = new Font("SansSerif",Font.BOLD,16);
		
		//1. Zeile
		label = new Label("Anzahl der Benutzer des Programms:");
		label.setFont(meinfont);
		label.setBounds(10,10,400,30);
		add(label);
	
		textfield = new TextField(20);
		textfield.setFont(meinfont);
		textfield.setBounds(430,10,280,30); // s.o.
		add(textfield);
		textfield.addActionListener(this);

		
		//2. Zeile
		label2 = new Label("Preis Fremdlizenzierung je Benutzer:");
		label2.setFont(meinfont);
		label2.setBounds(10,50,400,30);
		add(label2);
		
		textfield2 = new TextField(20);
		textfield2.setFont(meinfont);
		textfield2.setBounds(430,50,280,30); // s.o.
		add(textfield2);
		textfield2.addActionListener(this);
		
		//3. Zeile
		label3 = new Label("Geschätzte Anzahl an Programmierstunden:");
		label3.setFont(meinfont);
		label3.setBounds(10,90,400,30);
		add(label3);
		
		textfield3 = new TextField(20);
		textfield3.setFont(meinfont);
		textfield3.setBounds(430,90,280,30); // s.o.
		add(textfield3);
		textfield3.addActionListener(this);
		
		//4. Zeile
		label4 = new Label("Preis je Programmierstunde:");
		label4.setFont(meinfont);
		label4.setBounds(10,130,400,30);
		add(label4);
		
		textfield4 = new TextField(20);
		textfield4.setFont(meinfont);
		textfield4.setBounds(430,130,280,30); // s.o.
		add(textfield4);
		textfield4.addActionListener(this);
			
		radio = new CheckboxGroup();
		r1 = new Checkbox("Mit MwSt. berechnen",radio,true);
		r2 = new Checkbox("Ohne MwSt. berechnen",radio,true);
		r1.setFont(meinfont);
		r2.setFont(meinfont);
		r1.setBounds(10,170,200,30);
		r2.setBounds(250,170,200,30);
		add(r1);
		add(r2);
		r1.addItemListener(this);
		r2.addItemListener(this);
		
		
		
		button = new Button("Berechnen");
		button.setFont(meinfont);
		// Der Button soll 10 Punkte vom linken, 10 vom rechten
		// Rand entfernt sein, und 80 Pixel breit, 20 Pixel
		// hoch.
		button.setBounds(10,210,400,30);
		add(button);
		button.addActionListener(this);

		// Mausbewegungs-Listener einschalten.
		addMouseMotionListener(this);

	} 


	public void actionPerformed(ActionEvent e) {
	try {if (mwst == true) {		zahl = Double.parseDouble(textfield.getText());
							zahl *= Double.parseDouble(textfield2.getText());
							zahl += Double.parseDouble(textfield3.getText()) * Double.parseDouble(textfield4.getText());
							
							zahl*=1.19;
							label5 = new Label(""+zahl);
							label5.setFont(meinfont);
							label5.setBounds(10,260,400,30);
							add(label5);
							label5.setText(""+zahl);}
	else if (mwst == false) {zahl = Double.parseDouble(textfield.getText());
							zahl *= Double.parseDouble(textfield2.getText());
							zahl += Double.parseDouble(textfield3.getText()) * Double.parseDouble(textfield4.getText());
												
							label5 = new Label(""+zahl);
							label5.setFont(meinfont);
							label5.setBounds(10,260,400,30);
							add(label5);  }} 
							
							catch (NumberFormatException error) {
							label5 = new Label("Bitte geben Sie eine korrekte Zahl ein");
							label5.setFont(meinfont);
							label5.setBounds(10,260,400,30);
							add(label5);	}
		
	}

	public void itemStateChanged(ItemEvent e) {
		if (r1.getSelectedObjects() == null) { mwst = false; }
												
		else { mwst = true;	}
		
	}

	public void mouseMoved(MouseEvent e) {

	}

	public void mouseDragged(MouseEvent e) {
		
	}

	

	// Klick auf "Schließen"-Button beendet das Programm
	public void windowClosing(WindowEvent e) { System.exit(0); }

	// Mausklick ins Fenster beendet das Programm ebenfalls.
	public void mouseClicked(MouseEvent e) { }

	// Diese Events werden ignoriert.
	public void windowOpened(WindowEvent e) { System.out.println("Fenster wurde geöffnet.");}
	public void windowClosed(WindowEvent e) { System.out.println("Fenster wurde geschlossen."); }
	public void windowIconified(WindowEvent e) { System.out.println("Fenster wurde ikonifiziert."); }
	public void windowDeiconified(WindowEvent e)
	 {
	  System.out.println("Fenster wurde wiederhergestellt, Inhalt neu zeichnen.");
	 }
	public void windowActivated(WindowEvent e) {}
	public void windowDeactivated(WindowEvent e) {}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}

}
```


----------



## Marco13 (3. Apr 2008)

Label nicht neu erzeugen, nur neuen Text setzen

```
// Von [url]http://www.java-forum.org/de/viewtopic.php?t=67103&highlight=&sid=5e1450d903b6e6b83b67b3afcc571d6a[/url]

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.awt.print.*;
import java.lang.Double;


public class MultiGUI extends Applet implements MouseListener,WindowListener,ActionListener,ItemListener,MouseMotionListener {

    double zahl;
    public static TextField textfield;
    public static TextField textfield2;
    public static TextField textfield3;
    public static TextField textfield4;
    public static Font meinfont;
    public static Label label;
    public static Label label2;
    public static Label label3;
    public static Label label4;
    public static Label label5;
    public static Button button;
    public static Frame f;
    public static Applet a;
    public static Checkbox r1;
    public static Checkbox r2;
    public static CheckboxGroup radio;
    public static boolean mwst=false;


    public static void main(String[] args) {
        Frame f = new Frame("Kalkulator");
        f.setSize(800,350); // Größe ändern (breite, höhe)
        f.setBackground(Color.GREEN);
        f.setVisible(true); // Fenster sichtbar machen

        a = new MultiGUI(); // Applet-Context holen
        f.add(a); // Applet-Eigenschaften zum Fenster hinzufügen

        // "Schließen"-Knopf:
        // Verweis auf die in dieser Klasse definierten WindowAdapter-Mehoden
        f.addWindowListener((MultiGUI)a);

        // Maus-Events,
        // Verweis auf die in dieser Klasse definierten MouseAdapter-Mehoden
        f.addMouseListener((MultiGUI)a);

        a.init(); // paint(g); wird hier nicht gebraucht.
        a.start();
        f.setVisible(true); // Fenster und Buttons sichtbar machen
    } // Ende Applikation, ab hier Applet-Stuff.


    // paint() entspricht dem "main" bei Applikationen, wird aber
    // _jedesmal_ beim Zeichnen/Refresh des Applet aufgerufen.
    // Graphics g wird vom Browser geliefert und hat die Größe des
    // width=... und height=... Kontextes im APPLET-Tag in der
    // HTML-Datei.

    public void paint(Graphics g) { } // Hier ausnahmsweise leer.

    // init() wird nur einmalig zu Beginn aufgerufen
    public void init() {
        // Layout in 2 Zeilen a 4 Spalten
        // setLayout(new GridLayout(2, 4));

        setLayout(null); // freies Layout mit setBounds()

        meinfont = new Font("SansSerif",Font.BOLD,16);

        // 1. Zeile
        label = new Label("Anzahl der Benutzer des Programms:");
        label.setFont(meinfont);
        label.setBounds(10,10,400,30);
        add(label);

        textfield = new TextField(20);
        textfield.setFont(meinfont);
        textfield.setBounds(430,10,280,30); // s.o.
        add(textfield);
        textfield.addActionListener(this);


        // 2. Zeile
        label2 = new Label("Preis Fremdlizenzierung je Benutzer:");
        label2.setFont(meinfont);
        label2.setBounds(10,50,400,30);
        add(label2);

        textfield2 = new TextField(20);
        textfield2.setFont(meinfont);
        textfield2.setBounds(430,50,280,30); // s.o.
        add(textfield2);
        textfield2.addActionListener(this);

        // 3. Zeile
        label3 = new Label("Geschätzte Anzahl an Programmierstunden:");
        label3.setFont(meinfont);
        label3.setBounds(10,90,400,30);
        add(label3);

        textfield3 = new TextField(20);
        textfield3.setFont(meinfont);
        textfield3.setBounds(430,90,280,30); // s.o.
        add(textfield3);
        textfield3.addActionListener(this);

        // 4. Zeile
        label4 = new Label("Preis je Programmierstunde:");
        label4.setFont(meinfont);
        label4.setBounds(10,130,400,30);
        add(label4);

        textfield4 = new TextField(20);
        textfield4.setFont(meinfont);
        textfield4.setBounds(430,130,280,30); // s.o.
        add(textfield4);
        textfield4.addActionListener(this);

        radio = new CheckboxGroup();
        r1 = new Checkbox("Mit MwSt. berechnen",radio,true);
        r2 = new Checkbox("Ohne MwSt. berechnen",radio,true);
        r1.setFont(meinfont);
        r2.setFont(meinfont);
        r1.setBounds(10,170,200,30);
        r2.setBounds(250,170,200,30);
        add(r1);
        add(r2);
        r1.addItemListener(this);
        r2.addItemListener(this);


        label5 = new Label(""+zahl);
        label5.setFont(meinfont);
        label5.setBounds(10,260,400,30);
        add(label5);

        button = new Button("Berechnen");
        button.setFont(meinfont);
        // Der Button soll 10 Punkte vom linken, 10 vom rechten
        // Rand entfernt sein, und 80 Pixel breit, 20 Pixel
        // hoch.
        button.setBounds(10,210,400,30);
        add(button);
        button.addActionListener(this);

        // Mausbewegungs-Listener einschalten.
        addMouseMotionListener(this);

    }


    public void actionPerformed(ActionEvent e)
    {
        try
        {
            if (mwst == true)
            {
                zahl = Double.parseDouble(textfield.getText());
                zahl *= Double.parseDouble(textfield2.getText());
                zahl += Double.parseDouble(textfield3.getText()) * Double.parseDouble(textfield4.getText());
                zahl*=1.19;
                label5.setText(""+zahl);
            }
            else if (mwst == false)
            {
                zahl = Double.parseDouble(textfield.getText());
                zahl *= Double.parseDouble(textfield2.getText());
                zahl += Double.parseDouble(textfield3.getText()) * Double.parseDouble(textfield4.getText());
                label5.setText(""+zahl);
            }
        }
        catch (NumberFormatException error)
        {

            label5.setText("Bitte geben Sie eine korrekte Zahl ein");
        }
    }

public void itemStateChanged(ItemEvent e) {
    if (r1.getSelectedObjects() == null) { mwst = false; }

      else { mwst = true;   }

   }

   public void mouseMoved(MouseEvent e) {

   }

   public void mouseDragged(MouseEvent e) {

   }



   // Klick auf "Schließen"-Button beendet das Programm
   public void windowClosing(WindowEvent e) { System.exit(0); }

   // Mausklick ins Fenster beendet das Programm ebenfalls.
   public void mouseClicked(MouseEvent e) { }

   // Diese Events werden ignoriert.
   public void windowOpened(WindowEvent e) { System.out.println("Fenster wurde geöffnet.");}
   public void windowClosed(WindowEvent e) { System.out.println("Fenster wurde geschlossen."); }
   public void windowIconified(WindowEvent e) { System.out.println("Fenster wurde ikonifiziert."); }
   public void windowDeiconified(WindowEvent e)
    {
     System.out.println("Fenster wurde wiederhergestellt, Inhalt neu zeichnen.");
    }
   public void windowActivated(WindowEvent e) {}
   public void windowDeactivated(WindowEvent e) {}
   public void mouseEntered(MouseEvent e) {}
   public void mouseExited(MouseEvent e) {}
   public void mousePressed(MouseEvent e) {}
   public void mouseReleased(MouseEvent e) {}

}
```


----------



## Portisch (27. Apr 2012)

Ist jetzt schon ein älteres Thema aber ich habe ein ähnliches Problem.

Ich erzeuge ein Label, aber ohne Frame:

```
import java.applet.*;
import java.awt.*;

public class MeineErsteApp extends Applet
{
  Button okButton;
  Label myLabel = new Label("My Label");
  
  // Anfang Methoden
  public void init()
  {
    // Create the thread.
    ThreadExample mythread = new ThreadExample();
    mythread.init();
    
    setLayout(new FlowLayout());
    okButton = new Button("Action!");
    
    add(okButton);
    add(myLabel);
  }

  public void UpdateVars() {
    System.out.println("UpdateVars");
    myLabel.setText("anderer Text für Label");
}

  // Ende Methoden
}
```

Ich erzeuge einen ThreadExample im Init:

```
/*
Threads are needed when you want to perfom actions over and over again.
We want to show the current time and update that every second.
*/

import java.awt.*;
import java.applet.*;

// Implement Runnable, this will make it possible for threads
// to call the run method when activated.
    public class ThreadExample extends Applet implements Runnable
    {
         // Define your thread.
         Thread clockThread;
         // This variable will remain true for as long
         // we want the thread to run.
         boolean running = true;
         MeineErsteApp myupdate = new MeineErsteApp();

         public void init()
         {
              System.out.println("init Thread");
              // Create the thread.
              clockThread= new Thread(this);
              // and let it start running
              clockThread.start();
         }

         // Very important. You do not want your thread to keep running when
         // the applet is deactivated (eg. user left page)
         public void destroy()
         {
              // will cause thread to stop looping
              running = false;
              // destroy it.
              clockThread = null;
         }


     // The method that will be called when you have a thread.
     // You always need this when you implement Runnable (use a thread)
     public void run()
     {
       try
       {
        clockThread.sleep(5000);
       }
       catch (InterruptedException e)
       {
            System.out.println(e);
        }

          // loop until told to stop
          while (running)
          {
               //Now the reason for threads
               try
               {
                     // Wait 1000 milliseconds before continuing
                    clockThread.sleep(1000);
                    myupdate.UpdateVars();
                    System.out.println("Thread loop");
               }
               catch (InterruptedException e)
               {
                    System.out.println(e);
                }
               // he has wait and will now restart his actions.
          }
     }
}

/*
Be cautious when using threads, make sure to end them sometime and not to let them run too
fast. When threads are used to time on-screen drawing things could slow down
heavily.
*/
```

Ich möchte, dass der Thread jede Sekunde meine UpdateVars() aufruft um den Label Text zu ändern.
Die Prozedur wird auch aufgerufen, aber der Labeltext ändert sich nicht!?

Oder geht das anders in Java?


----------



## Marco13 (28. Apr 2012)

Das "MeineErsteApp", das du auf dem Bildschirm siehst, ist ein anderes "MeineErsteApp", als das, das als
MeineErsteApp myupdate
in ThreadExample erstellt wird. Letzteres sollte auch kein Applet sein. Wie bist du denn zu dem Code gekommen?


----------



## Portisch (30. Apr 2012)

Stimmt! Da ich in Java neu bin habe ich ihn mir zusammengeschustert.

Ich habe aber mittlerweile eine besser Methode gefunden: 
	
	
	
	





```
Timer
```
Damit erreiche ich eigentlich genau das was ich wollte


----------

