Estoy trabajando en un proyecto de sistema de reserva de vuelos. Mi preocupación es sobre el evento de escucha de acción anidado. Quiero decir que mi botón es un evento que depende de otro.

public void actionPerformed(ActionEvent ae) {

    if (ae.getSource() == b1) 
    {
        r1.setVisible(true);
        r2.setVisible(true);
        r3.setVisible(true);
        r4.setVisible(true);
        if(ae.getsource()==r1)
        {
            -------
            -------
        }
    }
}

Aquí, cuando estoy presionando mi botón b1 a partir de entonces, solo puedo presionar mi botón r1 pero el segundo si la condición no funciona.

Hágame saber cómo usar eventos de acción anidados.

0
Aman Goyal 25 ene. 2016 a las 17:25

3 respuestas

La mejor respuesta

ae.getSource() solo será igual a b1 o r1 (o algo más). No será igual a b1 y r1 al mismo tiempo, por lo que nunca se alcanzará su condición anidada. Si r1 no estará visible hasta que se haga clic en b1, probablemente esto sea todo lo que necesita.

public void actionPerformed(ActionEvent ae) {
    if (ae.getSource() == b1) {
        r1.setVisible(true);
        r2.setVisible(true);
        r3.setVisible(true);
        r4.setVisible(true);
    } else if (ae.getSource() == r1) {
        // do something
    }
}

De lo contrario, puede usar una variable para almacenar algún estado sobre cuándo r1 puede reaccionar al presionar un botón.

public void actionPerformed(ActionEvent ae) {
    if (ae.getSource() == b1) {
        r1ready = true;
    } else if (ae.getSource() == r1) {
        if (r1ready) {
          // do something
        }
    }
}
1
whiskeyspider 25 ene. 2016 a las 15:56

En su código, si la fuente es r1, el "if" interno nunca se ejecutará porque el "if" externo habrá sido falso. Lo que probablemente quieras es algo como:

  Object src = ae.getSource();
  if ( src == b1 ) {
     // handle clicke in b1
  } else if ( src == r1 ) {
     // handle clicks in r1
  }
0
FredK 25 ene. 2016 a las 15:48

Usaría una variable de nivel de clase para realizar un seguimiento de si se presionó el botón b1, o agregaría la llamada al método del controlador de eventos al botón r1 desde el controlador de eventos de los botones b1. Esto depende de cuál sería la funcionalidad del botón r1 si no se hubiera presionado el botón b1.

0
ghg565 25 ene. 2016 a las 14:43