# Ausgabe/Anzeigen in JTextfield



## Padawan (30. Januar 2013)

Hallo alle zusammen,

ich weiss nicht ob es dass richtige Forum mit jTextField ist.

Ich habe die folgende Klasse geschrieben:

```
package sensor;
public class SensorSimu implements Sensor_inf<Integer> {

    static private Integer zustandsWert = 0;

    @Override
    public void setValue(Integer newValue) {
       zustandsWert = newValue;
    }
    @Override
    public Integer getValue(){
        return zustandsWert;
    }
}
```

In einer anderen Klasse berechne ich irgendwelche werte und Übergebe die dann der Klasse Sensor über setValue.
Meine frage ist, wie kann man den wert dann in einer JTextField, die in einer weiteren (JFrame)Klasse implementiert ist ständig anzeigen lassen?

Grüße
Padawan


----------



## vfl_freak (31. Januar 2013)

Moin,



Padawan hat gesagt.:


> Meine frage ist, wie kann man den wert dann in einer JTextField, die in einer weiteren (JFrame)Klasse implementiert ist ständig anzeigen lassen?


Verstehe jetzt die Frage nicht wirklich .....

Grundlegend dort einfach mit "getValue()" den Wert holen und mit "myTextfield.setText( ... )" setzen ?

Aber hat es einen bestimmten Grund, dass Deine Variable vom Typ "*Integer*" ist 

Gruß
Klaus


----------



## Padawan (31. Januar 2013)

Hallo Klaus,



vfl_freak hat gesagt.:


> Grundlegend dort einfach mit "getValue()" den Wert holen und mit "myTextfield.setText( ... )" setzen ?



So habe ich es auch gemacht. Das Sache ist die, dass sich der Wert in  getValue() ständig ändert, z.B alle 1 sekunde.
Die frage ist halt, ob sich die Ausgabe auf der GUI auch gleich mit ändert (z.B. alle 1 sekunde)o der man z.B. actionListener und actionEvent oder ein Timer einbauen muss.


Das mit Integer hat keinen bestimmten grund :-(

Grüße
Padawan


----------



## Maddin (31. Januar 2013)

Hallo,

da musst du tatsächlich einen Listener ranhängen, der einmal gesetzte Wert eines Textfeldes ändert sich nur beim Neusetzen.

Gruß,
Martin


----------



## Padawan (1. Februar 2013)

Hallo,
ich hab ein bisschen rumprobiert, gibt es eigl eine Möglichkeit z.B. mit einem Timer die Events zu senden? :-(

grüße
Padawan


----------



## vfl_freak (1. Februar 2013)

Moin,

grundsätzlich sicher ...
Aber erklär' mal, was Du vor hast!

Gruß
Klaus


----------



## Padawan (1. Februar 2013)

Morgen,
Es sollen ja die Sensorwerte auf die GUI ausgegeben werden, nicht nur ein paar mal, sondern ständig. Die GUI muss ja deswegen "aktuallisiert" werden. Die frage ist halt die gehen soll. und da ist mir Timer eingefallen. 

grüße
padawan


----------



## Maddin (1. Februar 2013)

Hallo,

mir fallen da spontan zwei Möglichkeiten ein:
1. Bei jedem Update des Wertes auch das Textfeld updaten (Wie genau ändert sich der Wert?)
2. Was du schon gesagt hast: Einen Timer einbauen, der ständig aktualisiert, in etwa:

```
int delay = 1000; //1s = 1000ms
ActionListener textUpdate = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          textField.setText(yourvalue);
      }
};
new Timer(delay, textUpdate ).start();
```
EDIT: Siehe auch: http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/Timer.html

Persönlich fände ich aber die 1.Variante schöner, da dort die Oberfläche nur aktualisiert wird, wenn es auch benötigt wird.

Gruß,
Martin


----------



## Padawan (1. Februar 2013)

Hi,
die werte werden in einer anderen Klasse berechnet, wenn der aktuelle Sensorwert ungleich des Sollwertes ist.

grus
Padawan


----------



## Maddin (2. Februar 2013)

Dann würde ich dir vorschlagen, dass du diese Klasse zum Observable machst und beim Ändern des Wertes ein Event feuerst, welches von der Klasse mit deinem Textfeld (als Observer) verarbeitet wird und dabei der Wert auch in der Oberfläche geändert wird.

Für das Observer-Pattern einfach mal googeln, da gibt's viele Beispiele dazu.
(Grundlegend hast du ein Observable, welches "beobachtet" wird und Events abfeuert sowie einen Observer "Beobachter", der diese Events behandelt)


Für eine schnellere Implementierung kannst du auch einfach aus deiner Berechnungs-Klasse eine Methode aufrufen, die das Textfeld aktualisiert, das ist allerdings nicht so schön 

Gruß,
Martin


----------

