Pergunta

Eu tenho uma classe principal de um programa que lança outra classe que lida com todas as coisas GUI. Na GUI, eu tenho um botão que eu preciso anexar um ActionListener para.

O único problema é, o código a ser executado necessidades para residir dentro da classe principal.

Como posso obter o método ActionPerformed () para executar na classe principal, quando um botão é clicado em outro lugar?

Foi útil?

Solução

Faça o seu controlador ( "main" class) implementar a interface ActionListener, em seguida, passar uma referência para a classe vista:

public class View extends JFrame {
  public View(final ActionListener listener) {
   JButton button = new JButton("click me");
   button.addActionListener(listener);
   button.setActionCommand("do_stuff");

   getContentPane().add(button);

   pack();
   setVisible(true);
  }
 }

 public class Control implements ActionListener {

  public Control() {
   new View(this);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
   if (e.getActionCommand().equals("do_stuff")) {
    // respond to button click
   }
  }
 }

Ele também pode ser feito com Ações , mas isso é mais útil quando você quer um pedaço de código para responder a muitos botões.

Outras dicas

Implementar uma classe interna anônima como ActionListener no botão, em seguida, chamar o método na sua classe principal. Isso cria menos dependências e evita a tag & estilo interruptor de programação que implementa a interface ActionListener em uma classe principal tende a promover.

Em ambos os casos ele irá criar um ciclo no seu gráfico de dependência: a classe principal vai saber sobre o botão eo botão vai precisar ligar para a classe principal. Isto pode não ser uma boa ideia, uma vez que irá tornar mais difícil para as coisas compor em qualquer outra maneira. Mas sem mais informações é difícil julgar a situação ou recomendar nada de concreto.

Implementar ActionListener em sua classe principal e adicionar a instância da classe principal como ouvinte em seu botão GUI.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top