Sou novo em java fx e estudando uma apostila da Casa do Código , me deparei com este erro.
Olá, posta o código completo para poder te ajudar, mas me parece que seu btSair está nulo.
`
import javax.swing.JOptionPane;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class LoginApp extends Application {
private AnchorPane pane;
private TextField txLogin;
private PasswordField txSenha;
private Button btEntrar, btSair;
private static Stage stage;
@Override
public void start(Stage stage) throws Exception {
initComponetes();
initListeners();
Scene scene = new Scene(pane);
stage.setScene(scene);
// Remove a opção de maximizar a tela
stage.setResizable(false);
// Dá um título para a tela
stage.setTitle("Login - GolFX");
stage.show();
initLayout();
LoginApp.stage = stage;
}
private void initComponetes() {
pane = new AnchorPane();
pane.setPrefSize(400, 300);
TextField txLogin = new TextField();
txLogin.setPromptText("Digite aqui o seu login");
PasswordField txSenha = new PasswordField();
txSenha.setPromptText("Digite sua senha");
Button btEntrar = new Button("Entrar");
Button btSair = new Button("Sair");
pane.getChildren().addAll(txLogin, txSenha, btEntrar, btSair);
}
public void initLayout() {
// Calculo para centralizar os componetes no centro da tela
txLogin.setLayoutX((pane.getWidth() - txLogin.getWidth()) / 2);
txLogin.setLayoutY(50);
txSenha.setLayoutX((pane.getWidth() - txSenha.getWidth()) / 2);
txSenha.setLayoutY(100);
btEntrar.setLayoutX((pane.getWidth() - btEntrar.getWidth()) / 2);
btEntrar.setLayoutY(150);
btSair.setLayoutX((pane.getWidth() - btSair.getWidth()) / 2);
btSair.setLayoutY(200);
// CSS para melhorar o visual do menu principal
pane.setStyle("-fx-background-color: linear-gradient(from 0% 0% to 100% 100%, blue 0%, silver 100%);");
}
private void fecharAplicacao() {
System.exit(0);
}
public static Stage getStage() {
return stage;
}
private void initListeners() {
btSair.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
fecharAplicacao();
}
});
btEntrar.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
logar();
}
});
}
private void logar() {
if (txLogin.getText().equals("admin") && txSenha.getText().equals("casadocodigo")) {
// TODO Abrir a tela VitrineApp
} else {
JOptionPane.showMessageDialog(null, "Login e/ou senha inválidos", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String[] args) {
launch(args);
}
}
`
@Julio_Si_Freitas, os botões estão sofrendo shadowing no initComponents. Mude o método initComponents para:
private void initComponetes() {
pane = new AnchorPane();
pane.setPrefSize(400, 300);
txLogin = new TextField();
txLogin.setPromptText("Digite aqui o seu login");
txSenha = new PasswordField();
txSenha.setPromptText("Digite sua senha");
btEntrar = new Button("Entrar");
btSair = new Button("Sair");
pane.getChildren().addAll(txLogin, txSenha, btEntrar, btSair);
}
Abcs!
ia responder isso rs
Perfeito hlucasfranca, muito obrigado!
Valeu pela atenção Andrauss!
Blz, esse exemplo é do livro da casa do código certo? Futuramente indico usar o FXML tem um tutorial muito bom aqui.

