Jak zmierzyć czas naciśnięcia klawisza?

0

Witam chciałbym napisać prosty programik który mierzy czas wciśnięcia klawisza ale mam kilka pytań:

  1. czy da się to zrobić przy pomocy JOptionPane.showInputDialog() tzn. w linii komend czy trzeba do tego pisać aplet?
  2. do pomiaru czasu można użyć System.nanoTime() jednak zwraca on wartość long. W jaki sposób można przekonwertować ją potem na string?
    Jestem początkujący jeśli chodzi o javę i totalnie zielony jeśli chodzi o obsługę klawiatury więc moje pytania mogą się wydać idiotyczne:)
    Programik ma jedynie zmierzyć czas wciśnięcia klawisza i wyświetlić go następnie na ekranie. Jaki jest najprostszy sposób żeby tego dokonać, bo mam wrażenie że w moich próbach idę "na około".

public class ButtonPressTime implements KeyListener{

long poczatek;
long koniec;

public static void main(String[] args) {		
	String klawisz = JOptionPane.showInputDialog
	("Wpisz jedna litere:");
	System.out.println("Trzymales klawisz przez:" + koniec);
}
public void keyPressed(KeyEvent e) {
	poczatek = System.nanoTime();
	
}
public void keyReleased(KeyEvent e) {
	koniec = System.nanoTime() - poczatek;

Czy takie coś ma chociaż sens?

0

najprosciej to chyba wykryc zdazenie wcisniecia klawisza, odpalic wtedy nowy watek z timerem i zatrzymac go w chwili puszczenia klawisza. Bedziesz mial wtedy w timerze zapisany czas trzymania klawisza

0

Ale czy ten fragment kodu wklejony powyżej ma sens? Czy można zrobić to przy pomocy JOptionPane.showInputDialog()?

0
matthew87 napisał(a)

najprosciej to chyba wykryc zdazenie wcisniecia klawisza, odpalic wtedy nowy watek z timerem i zatrzymac go w chwili puszczenia klawisza. Bedziesz mial wtedy w timerze zapisany czas trzymania klawisza

Buty też wiazesz w rekawicach bokserskich ?

zenonmocarny, zauwaz ze nigdzie nie tworzysz obiektu klasy ButtonPressTime wiec metody keyPress oraz keyReleased nie sa nigdy wykonywane juz nie mowiac o tym ze w statycznej metodzie nie masz dostepu do zmiennych instancyjnych

0

Czyli co musiałbym poprawić w tym kawałku kodu żeby trzymało się to kupy? Mógłby ktoś mi wskazać palcem co jest tam źle?

0
import java.awt.Container; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.GregorianCalendar; import javax.swing.JFrame; import javax.swing.JLabel;

public class Timer {

public static class ButtonPressTime extends JFrame implements KeyListener{
	
	private long start;
	private JLabel lab;
	int keyCode = -1;
	
	public ButtonPressTime() {
		super("Press the key");					
		Container cnt = this.getContentPane();
		this.setFocusable(true);
		this.addKeyListener(this);
		lab = new JLabel();
		lab.setSize(100, 50);			
		cnt.add(lab);
		this.setSize(300, 100);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

	@Override
	public void keyPressed(KeyEvent arg0) {
		if (arg0.getKeyCode() != keyCode) {
			start = new GregorianCalendar().getTimeInMillis();		
			keyCode = arg0.getKeyCode();
		}
	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		if (arg0.getKeyCode() == keyCode) {
			lab.setText(
					"Key '" + arg0.getKeyChar() + "' pressed for " + 
					Double.toString(
							(new GregorianCalendar().getTimeInMillis() - start) * 0.001) + 
							" seconds.");
			keyCode = -1;
		}
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub			
	}

}

public static void main(String[] atgs) {		
	new ButtonPressTime();
}

}

0

Dzięki wielkie za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1