Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Como descobrir e usar metódos de um objeto que chamou um handler (JavaFX)?

Olá pessoal, estou implementando uma calculadora em JavaFX (exercício) com a GUI em FXML e me deparei com um probleminha: Penso que todos os botões numéricos devem chamar um único método, se não vou ter que implementar o mesmo método pra cada botão e isso não me parece nada elegante. Se eu pudesse passar o objeto da classe Button como parâmetro seria fácil, mas não funciona. Então me digam, como eu faço dentro do método num() para usar o getText() do botão que invocou num()?

@FXML
    private void num(ActionEvent event) {
        //textefield.setText(textefield.getText()+??); como eu vou concatenar o numero?
        label.setText(event.getSource().toString());
    }

Este método está na classe controller do fxml. Grato.

3 respostas
solução!

Você precisa usar o getSource() e fazer o cast para o tipo Button.. Já que vc sabe que o source, nesse caso, é um Button. As dúvidas de Javafx ficam mais paradas no fórum pois não temos nada relativo ao tópico, temos que sair procurando :).

Ficou assim!

@FXML
    private void num(ActionEvent event) {
        Button quemChamou = (Button)event.getSource();
        textField.setText( textField.getText() + quemChamou.getText());
    }

Perfeito! Eu não sabia que podia fazer o cast de classe! Tinha feito uma gambiarra feia. Tava assim:

    @FXML
    private void num(ActionEvent event) {
        String teste = event.getSource().toString().substring(35, 36);
        textField.setText( textField.getText() + teste);
    }

Desse jeito eu tinha que colocar o fx:id de cada button com o mesmo comprimento. Muito obrigado!

Sugestão de curso pro Alura: JavaFX!