Pregunta

Estoy escribiendo un applet y quiere encontrar la manera de hacer un botón y una cubierta evento clave el mismo trozo de código. Para esta pregunta, voy a llamar a este botón fireButton. El código para el evento de acción haría mirada curso como este:

public void actionPerformed(ActionEvent e) {
   if (e.getSource() == fireButton) {
      //all the code that pressing button executes
   }  
}

Ahora, quiero presionar la tecla 'enter' para llevar a cabo el mismo código que maneja el evento de acción, pero no quiero volver a escribir todo el código de nuevo en un método keyPressed.

Para ser más específicos, estoy escribiendo un programa acorazado, y el botón de 'fuego' toma de entrada de dos campos de texto, tiradores de excepciones, y pasa a la entrada como parámetros a un método que dispara a un cuadrado en particular en la cuadrícula. Lo ideal sería que, al presionar la tecla enter funcionaría de la misma manera como si hubiera pulsado el botón de disparo. ¿Hay una manera de hacer un cierto método de llamar a un método actionPerformed? Si no es así, ¿cuál sería una solución elegante al problema?

¿Fue útil?

Solución

  1. Crear una acción
  2. Añadir a la acción de la JButton
  3. Uso de la clave Vinculaciones para enlazar la tecla Enter para la Acción

oscilación tutorial . Hay secciones en:

  1. ¿Cómo utilizar las acciones
  2. ¿Cómo utilizar la tecla enlaces

Si usted está hablando sólo de invocar el botón "fuego" con la tecla enter y luego salir tecla Enter y el botón por un par de enfoques.

Otros consejos

le sugiero que ponga todo el código en un método independiente que recibe todos los datos relevantes del evento (si los hay) como parámetros:

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == fireButton) {
        Object relevantData0 = new Object(); // e.getSomething();
        Object relevantData1 = new Object(); // e.getSomethingElse();
        handleFireAction(relevantData1, relevantData2);
    }
}  

public void actionPerformed(KeyEvent e) {
    if (e.getSource() == fireButton) {
        Object relevantData0 = new Object(); // e.getSomething();
        Object relevantData1 = new Object(); // e.getSomethingElse();
        handleFireAction(relevantData1, relevantData2);
    }
}  

private void handleFireAction(Object relevantData0, Object relevantData1) { // Object relevantDat2, and so on
    //all the code that pressing button executes
}  

Si usted no necesita ningún dato del evento es incluso más fácil;) De esta manera usted acaba de escribir el código una vez para ambos eventos. Es un esquema general OO.
Espero que esto ayude.

MVC te recomendaría que tiene una clase controlador que se encarga de estas tipo de peticiones. Entonces todo lo que tiene que hacer es delegado al controlador en cada controlador de eventos.

Al igual que:

public class BattleShipController {

   public void handleFireAction() {
   // ...
   }
}

//-- in your UI class(es)
private BattleShipController _controller = new BattleShipController();

//-- in event calls:
_controller.handleFireAction();

Si publica código relevante que puedo hacer otras sugerencias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top