Zeit messen, bei Eingabe in Textarea

Hallo an alle,

ich will einen Schreibmaschinentrainer programmieren bei dem u.a. die Zeit gemessen werden soll, die der Benutzer braucht um eine Eingabe in ein Textfeld (Textarea) zu machen.

Dazu habe ich unter dem Event: Key typed des Textfelds zwei If-Schleifen angelegt, eine Bedingung, wenn die Länge 0 beträgt und die andere, wenn die Länge 100 beträgt. In beiden Schleifen hol ich mir die Systemzeit und am Schluss subtrahiere ich sie voneinander. Mein Problem ist, wenn ich die Anfangs- von der Endzeit subtrahieren will, kann ich nicht mehr auf die variable zugreifen, die den Wert der Anfangszeit speichert.

Ich hab momentan einfach ein Brett vorm Kopf was die Lösung betrifft, denn die kann nicht so schwer sein, es ist bestimmt nur ein banaler Denkfehler.
Ich hoffe Ihr könnt mir helfen.

long start;
long end;

if (textFeld.getText().length()==0)
{
long beginn = System.currentTimeMillis();
start=beginn;
}

if (textFeld.getText().length()==100)
{

long ende = System.currentTimeMillis();
end=ende;


long zeit=(end-start)/1000;
benZeit.setText(zeit+"");

}

Dank euch schonmal

Gruß
 
Hallo,

wenn dein Code so in dem Eventhandler steht, sind die Variablen long start und end
nur lokal für die Methode gültig. So werden gespeicherte Werte nach Methodenende
natürlich vergessen !
Lege start und end einfach als Instanzvariablen der Klasse an in der der Eventhandler
definiert ist und weise dann direkt die Zeitmarken zu ->

Code:
start = System.currentTimeMillis();

bzw.

end = System.currentTimeMillis();

Gruß JAdix
 
Hallo,

ich meinte folgendes :

Code:
class myKeyListener implements KeyListener {

 long start;
 long end;

 . . .
  
  public keyTyped(KeyEvent e) {

      // Variablen nicht hier deklarieren ! ! !

      if (textFeld.getText().length()==0  ) { start = System.currentTimeMillis(); }
      if (textFeld.getText().length()==100) { end = System.currentTimeMillis(); }

      . . . 
   } 

 . . .
}

Gruß JAdix
 
...Nun ist es aber leider so, dass ich in Netbeans 5.5 arbeite. Ich sehe in der Quelltextansicht nur den Methodenaufruf

private void textFeldKeyTyped(java.awt.event.KeyEvent evt) {

(Denn ich auch nicht verändern kann).

Ich weis dummerweise nicht, wie ich zur Klasse des Eventhandlers komme bzw, wie ich dieser Instanzvariablen mitgeben kann.

Hast du vielleicht eine Idee?

Gruß
Martin
 
Hallo,

Nun ist es aber leider so, dass ich in Netbeans 5.5 arbeite

nun ist das aber leider so, dass ich dir da nicht weiterhelfen kann, da ich Eclipser bin !

Aber ich denke auch da wird es möglich sein dicht genug an den Source zu kommen
um das zu realisieren.

Irgend wo ein NetzBohnen-Programmierer in der nähe ? ? ?

Gruß JAddix
 
Hi devils advocate,

ich bevorzuge zwar auch eclipse, hab aber gezwungenermaßen auch schon ein paar Sachen in Netbeans gemacht ...

Versuch mal folgendes(Hab's nicht getestet, deshalb verlass dich nicht zu sehr darauf):

im Designmodus kannst du mit der rechten Maustaste auf das Textfeld klicken und im Kontextmenü den punkt events raussuchen, ich glaub unter key gibt es dann das keytyped-event .... wenn's die methode noch nicht gibt, legt sie netbeans für dich an ...

und in dieser methode deponierst du dann einfach den vorher vorgeschlagenen code
Code:
if (textFeld.getText().length()==0  ) { start = System.currentTimeMillis(); }
if (textFeld.getText().length()==100) { end = System.currentTimeMillis(); }

viel glück

lg Andi
 
Hi Andi,

genau das hatte ich ursprünglich gemacht.
Das Problem sind glaube ich die Schleifen. Denn wenn ich die Variable "start" in der If-Abfrage
"if (textFeld.getText().length()==0 )" initialisiere, dann kann ich sie in der zweiten If-Abfrage nicht mehr verwenden.

Dazu meinte TheJadix ich sollte die Variablen Start und End bereits in der Klasse anlegen. Das geht aber nicht, weil ich die Klasse nicht sehe bzw. von Netbeans erstellten Code nicht verändern kann.

Gruß
Martin
 
Dazu meinte TheJadix ich sollte die Variablen Start und End bereits in der Klasse anlegen. Das geht aber nicht, weil ich die Klasse nicht sehe bzw. von Netbeans erstellten Code nicht verändern kann.

Gruß
Martin
Moin!
Du musst ja auch nicht den von NetBeans erstellen Code ändern. Wenn du die GUI mit NetBeans erstellst, ist nur die Initialisierung der einzelnen GUI Komponenten schreibgeschützt. Globale Variablen kann man dennoch anlegen. Zudem, wenn ich eine Event Listener Methode anlege, ist auch nur der Methodenrumpf schreibgeschützt. Der Inahlt selbst kann dennoch editiert werden.

*grüssle*
MeinerEiner
 
Zurück