BORRAR EL BUFFER DEL TECLADO

aquicas
26 de Junio del 2005
Hola,
He implementado en un JComponent unas acciones en el keyMap. Estas acciones controlan la actividad de un visor de peliculas. El problema es que cuando pulsas repetidamente una tecla, se queda almacenado un monton de veces cada acción y tarda un monton de tiempo en ejecutarse todas. ¿hay alguna forma de limpiar el buffer del teclado o hacer las acciones solo una vez?
Gracias por adelantado, el código es el siguiente;


public class KeyCommand
{
private MediaPlayerFrame player = null;
private InputMap inputMap;

public KeyCommand(JComponent controlador)
{
// Asociamos el mapa a un componente
inputMap = controlador.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);

// Asociamos nuestras teclas de control con nuestro juego de acciones
inputMap.put(KeyStroke.getKeyStroke("F2"), "actionPLAY");
//inputMap.put(KeyStroke.getKeyStroke("F3"), "actionSTOP");
inputMap.put(KeyStroke.getKeyStroke("F3"), "actionPAUSE");

inputMap.put(KeyStroke.getKeyStroke("F1"), "actionFF");
inputMap.put(KeyStroke.getKeyStroke("F4"), "actionFR");

inputMap.put(KeyStroke.getKeyStroke("F6"), "actionSR");
inputMap.put(KeyStroke.getKeyStroke("F7"), "actionSF");

inputMap.put(KeyStroke.getKeyStroke("F5"), "actionRATES");
inputMap.put(KeyStroke.getKeyStroke("F8"), "actionRATEF");

inputMap.put(KeyStroke.getKeyStroke("F9"), "actionGOSTART");
inputMap.put(KeyStroke.getKeyStroke("F12"), "actionGOEND");

inputMap.put(KeyStroke.getKeyStroke("F10"), "actionSgR");
inputMap.put(KeyStroke.getKeyStroke("F11"), "actionSgF");


// Añadimos la accion STOP al componente
controlador.getActionMap().put("actionSTOP",
new AbstractAction("actionSTOP") {
public void actionPerformed(ActionEvent evt) {
if (player != null) player.stop();
}
}
);
// Añadimos la accion PLAY al componente
controlador.getActionMap().put("actionPLAY",
new AbstractAction("actionPLAY") {
public void actionPerformed(ActionEvent evt) {
if (player != null) player.play();
}
}
);
// Añadimos la accion PAUSE al componente
controlador.getActionMap().put("actionPAUSE",
new AbstractAction("actionPAUSE") {
public void actionPerformed(ActionEvent evt) {
if (player != null) player.stop();
}
}
);
// Añadimos la accion FASTFORDWARE al componente
controlador.getActionMap().put("actionFF",
new AbstractAction("actionFF") {
public void actionPerformed(ActionEvent evt) {
// process(evt);
String a = new String("a");
}
}
);
// Añadimos la accion STEPREVERSE al componente
controlador.getActionMap().put("actionSR",
new AbstractAction("actionSR") {
public void actionPerformed(ActionEvent evt) {
if (player != null) player.SR();
}
}
);
// Añadimos la accion STEPFORDWARE al componente
controlador.getActionMap().put("actionSF",
new AbstractAction("actionSF") {
public void actionPerformed(ActionEvent evt) {
if (player != null) player.SF();
}
}
);
// Añadimos la accion RATE- al componente
controlador.getActionMap().put("actionRATES",
new AbstractAction("actionRATES") {
public void actionPerformed(ActionEvent evt) {
if (player != null){
player.setRate(player.getRate() - 1);
}
}
}
);
// Añadimos la accion RATE+ al componente
controlador.getActionMap().put("actionRATEF",
new AbstractAction("actionRATEF") {
public void actionPerformed(ActionEvent evt) {
if (player != null) {
player.setRate(player.getRate() + 1);
}
}
}
);
// Añadimos la accion GOSTART al componente
controlador.getActionMap().put("actionGOSTART",
new AbstractAction("actionGOSTART") {
public void actionPerformed(ActionEvent evt) {
if (player != null) {
player.goSTART();
}
}
}
);
// Añadimos la accion GOEND al componente
controlador.getActionMap().put("actionGOEND",
new AbstractAction("actionGOEND") {
public void actionPerformed(ActionEvent evt) {
if (player != null) {
player.goEND();
}
}
}
);
// Añadimos la accion SegundoForward al componente
controlador.getActionMap().put("actionSgF",
new AbstractAction("actionSgF") {
public void actionPerformed(ActionEvent evt) {
if (player != null) {
player.SgF();
}
}
}
);
// Añadimos la accion SegundoReverse al componente
controlador.getActionMap().put("actionSgR",
new AbstractAction("actionSgR") {
public void actionPerformed(ActionEvent evt) {
if (player != null) {
player.SgR();
}
}
}
);
}