Javafx 8 - Erro ao resetar Combo Box

Boa noite pessoal, sou novo aqui no fórum.

Estou tentando resetar um combo box quando uma certa ação e realizada, porem que se essa ação é executada ele reseta o combo, mas gera erro. Se alguém poder me ajudar fico muito grato!

/----Código abaixo----\

Quando eu clico no combo box é executada a seguinte ação:

@FXML
private void CheckComboBox() {
if (CB_Acao.getValue().equals(“Inserir Saldo”)) {
//Habilita inserir saldo;
EnableSaldo();
//Reseta a opção selecionada do ComboBox;
CB_Acao.getSelectionModel().clearSelection();
}
}

Logo após vem o seguinte erro:

Caused by: java.lang.NullPointerException
at Controller.controllerForm.CheckComboBox(controllerForm.java:42)
… 158 more

E essa linha 42 é o meu if.


@FXML
private ComboBox CB_Acao

Mas meu código está assim amigo e da o mesmo erro.

1 curtida

Colocar a tua classe completa e o teu arquivo .fxml pra dar uma olhada

FXML
<BorderPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller.controllerForm"> <center> <GridPane hgap="5" vgap="5" alignment="CENTER"> <Label text="Selecione uma ação:" GridPane.rowIndex="0" GridPane.columnIndex="0"/> <ComboBox fx:id="CB_Acao" onAction="#CheckComboBox" promptText="Selecionar" GridPane.rowIndex="1" GridPane.columnIndex="0"> <items> <FXCollections fx:factory="observableArrayList"> <String fx:value="Inserir Saldo"/> <String fx:value="Excluir Funcionário"/> <String fx:value="Excluir Serviço"/> </FXCollections> </items> </ComboBox> <GridPane alignment="CENTER" GridPane.rowIndex="2" hgap="5" vgap="5" gridLinesVisible="false" > <Label fx:id="Lbl_Saldo2" text="Novo Saldo:" GridPane.rowIndex="0" GridPane.columnIndex="0" /> <TextField fx:id="Txt_Adicionar_Sal" GridPane.columnIndex="0" GridPane.rowIndex="1" maxWidth="85"/> <HBox GridPane.columnIndex="0" GridPane.rowIndex="2" spacing="5"> <Button fx:id="Btn_Adicionar" text="Adicionar" onAction="#OnSaldo" /> <Button fx:id="Btn_Cancel" text="Cancelar"/> </HBox> </GridPane> </GridPane> </center> </BorderPane>

Classe

package Controller;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

/**
*

  • @author Jefersom Alves
    */
    public class controllerForm {

    @FXML
    private ComboBox CB_Acao;
    @FXML
    private Label Lbl_Saldo2;
    @FXML
    private TextField Txt_Adicionar_Sal;
    @FXML
    private Button Btn_Adicionar;
    @FXML
    private Button Btn_Cancel;

    @FXML
    private void initialize() {

     System.out.println("Controler formulário inicializado!");
     DisableSaldo();
    

    }

    @FXML
    private void CheckComboBox() {
    if (CB_Acao.getValue().equals(“Inserir Saldo”)) {
    //Habilita inserir saldo;
    EnableSaldo();
    //Reseta a opção selecionada do ComboBox;
    //CB_Acao.setDisable(true);
    CB_Acao.getSelectionModel().clearSelection();
    }
    }

    private void EnableSaldo() {
    Lbl_Saldo2.setDisable(false);
    Txt_Adicionar_Sal.setDisable(false);
    Btn_Adicionar.setDisable(false);
    Btn_Cancel.setDisable(false);
    }

    //Disabilita a opção de preenchimento de saldo;
    private void DisableSaldo() {
    Lbl_Saldo2.setDisable(true);
    Txt_Adicionar_Sal.setDisable(true);
    Btn_Adicionar.setDisable(true);
    Btn_Cancel.setDisable(true);
    }

    //Reseta a opção selecionada do ComboBox;
    private void LimpaAcaoCB() {

    }

    @FXML
    private void OnSaldo() {
    System.out.println("Saldo add: " + Txt_Adicionar_Sal.getText());
    Txt_Adicionar_Sal.clear();
    CB_Acao.setDisable(false);
    //Limpa as opções escolhidas;
    }
    }

O arquivo fxml estar completo ? é só isso .

Aconteceu algum bug foi mal.

Agora sim, segue o arquivo FXML:

<BorderPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller.controllerForm"> <center> <GridPane hgap="5" vgap="5" alignment="CENTER"> <Label text="Selecione uma ação:" GridPane.rowIndex="0" GridPane.columnIndex="0"/> <ComboBox fx:id="CB_Acao" onAction="#CheckComboBox" promptText="Selecionar" GridPane.rowIndex="1" GridPane.columnIndex="0"> <items> <FXCollections fx:factory="observableArrayList"> <String fx:value="Inserir Saldo"/> <String fx:value="Excluir Funcionário"/> <String fx:value="Excluir Serviço"/> </FXCollections> </items> </ComboBox> <GridPane alignment="CENTER" GridPane.rowIndex="2" hgap="5" vgap="5" gridLinesVisible="false" > <Label fx:id="Lbl_Saldo2" text="Novo Saldo:" GridPane.rowIndex="0" GridPane.columnIndex="0" /> <TextField fx:id="Txt_Adicionar_Sal" GridPane.columnIndex="0" GridPane.rowIndex="1" maxWidth="85"/> <HBox GridPane.columnIndex="0" GridPane.rowIndex="2" spacing="5"> <Button fx:id="Btn_Adicionar" text="Adicionar" onAction="#OnSaldo" /> <Button fx:id="Btn_Cancel" text="Cancelar"/> </HBox> </GridPane> </GridPane> </center> </BorderPane>

Tente fazer isso

@FXML
private ComboBox<String> CB_Acao;

E preciso colocar um valor default para não dar o NullPointException

Coloquei mas não deu.
private ComboBox<String> CB_Acao;

Mas continua com o mesmo erro.

Fiz algo e deu certo

Baixar esse pacote

Link

E executa a classe Controller

Tem certeza cara? Continua com o mesmo erro. Esse jeito que você fez acho que não precisava de alguns códigos como os que você colocou no controller, pois os mesmo estão na minha classe principal. Deixa eu te explicar um pouco mais. Esse aquivo que postei é de um teste, o meu arquivo original possui a classe principal que executa um login e depois do login, um formulário que contem esse combobox.
Não sei porque você colocou alguns códigos da classe principal na classe controller. Mas se não conseguir eu já fico grato pelo menos ter tentando.

Amigo não dar dando certo por que você colocou o metodo na action do CheckBox e ele não tem nenhum valor quando ele é clicado. Por isso o NullPontException

Dentro da action do Button adicionar colocar assim :

Faça assim :

        @FXML
	private void OnSaldo() {
	    System.out.println("Saldo add: " + Txt_Adicionar_Sal.getText());
	    Txt_Adicionar_Sal.clear();
	    CB_Acao.setDisable(false);  
	    if (CB_Acao.getValue().equals("Inserir Saldo")) {
	        //Habilita inserir saldo;
	        EnableSaldo();
	        //Reseta a opção selecionada do ComboBox;
	        //CB_Acao.setDisable(true);
	        //CB_Acao.getSelectionModel().clearSelection();
	        CB_Acao.setValue("Selecionar");
		}
	}
1 curtida

Ae caralho kkk. Valeu cara deu certinho. Muito obrigado, e tudo de bom pra você! :wink:

1 curtida