Como fazer para aparecer o valor de um ArrayList em label em JavaFX?

Eu estou a tarde inteira testando métodos diferentes e nenhum funciona. O que mais chegou próximo de funcionar é um onde se é utilizado “get”, porém quando confirmo o novo valor ele não aparece. Irei deixar algumas partes do programa aqui, se alguém puder ajudar ficarei muito agradecido. (se precisar de mais alguma coisa só pedir)

Classe Principal:

package encontrotesla;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *
 * @author conta
 */
public class EncontroTesla extends Application {
    
    private static Stage stagePrincipal;
    private static Scene telaInicial;
    private static Scene telaConvidados;
    private static Scene telaAddConvidado;
    
    @Override
    public void start(Stage stage) throws Exception{
        stagePrincipal = stage;
        
        stage.setTitle("Painel de Controle - Encontro Tesla");
        stage.setMaximized(true);
        
        Parent telaPrincipal = FXMLLoader.load(getClass().getResource("FXMLTelaInicial.fxml"));
        telaInicial = new Scene(telaPrincipal);
        
        Parent telaDosConvidados = FXMLLoader.load(getClass().getResource("FXMLConvidados.fxml"));
        telaConvidados = new Scene(telaDosConvidados);
        
        Parent telaDosAddConvidados = FXMLLoader.load(getClass().getResource("FXMLAddConvidado.fxml"));
        telaAddConvidado = new Scene(telaDosAddConvidados);
        
        stage.setScene(telaInicial);
        stage.show();
    }
    
    public static void mudarTela(String click){
        switch(click){
            case "convidados":
                stagePrincipal.setScene(telaConvidados);
                break;
            case "addConvidado":
                stagePrincipal.setScene(telaAddConvidado);
                break;
            case "voltar":
                stagePrincipal.setScene(telaInicial);
                break;
        }
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}

FXMLConvidadosController.java:

package encontrotesla;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

/**
 * FXML Controller class
 *
 * @author conta
 */

public class FXMLConvidadosController implements Initializable {

    @FXML
    private Button btnAddConvidado;
    @FXML
    public static Label convidado1;
    @FXML
    private Label convidado2;
    @FXML
    private Label convidado3;
    @FXML
    private Label convidado4;
    @FXML
    private Label convidado6;
    @FXML
    private Label convidado5;
    @FXML
    private Label convidado7;
    @FXML
    private Label convidado8;
    @FXML
    private Label convidado9;
    @FXML
    private Label convidado10;
    @FXML
    private Label convidado11;
    @FXML
    private Button btnVoltar;
    
    /**
     * Initializes the controller class.
     * @param url
     * @param rb
     */
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
    }    
    
    @FXML
    private void adicionarConvidado(ActionEvent event) {
        EncontroTesla.mudarTela("addConvidado");
    }

    @FXML
    private void clicarVoltar(ActionEvent event) {
        EncontroTesla.mudarTela("voltar");
    }
    
}

FXMLAddConvidadoController.java:

package encontrotesla;

import static encontrotesla.FXMLConvidadosController.convidado1;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;

/**
 * FXML Controller class
 *
 * @author conta
 */
public class FXMLAddConvidadoController implements Initializable {

    @FXML
    private Button btnAdicionar;
    @FXML
    private Button btnVoltar;
    @FXML
    private Button btnCancelar;
    @FXML
    private TextField txtNome;
    @FXML
    private TextField txtTelefone;
    @FXML
    private TextField txtEmail;
    @FXML
    private TextField txtData;
    
    public static ArrayList<Convidados> convidados = new ArrayList();
    
    /**
     * Initializes the controller class.
     * @param url
     * @param rb
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

    @FXML
    private void clicarAdicionar(ActionEvent event) {
        
        String nome = txtNome.getText();
        String data = txtData.getText();
        String telefone = txtTelefone.getText();
        String email = txtEmail.getText();
        
        if("".equals(nome)){
            alertNomeVazio();
        }else if("".equals(data)){
            alertDataVazia();
        }else if("".equals(telefone)){
            alertTelefoneVazio();
        }else if("".equals(email)){
            alertEmailVazio();
        }else{
            Convidados convidado = new Convidados(nome, data, telefone, email);
            convidados.add(convidado);
        
            alertAdicionado();
            txtNome.clear();
            txtData.clear();
            txtTelefone.clear();
            txtEmail.clear();
            System.out.println(convidados);
            convidado1.setText(convidados.get(1) + "");
        }
    }

    @FXML
    private void clicarVoltar(ActionEvent event) {
        EncontroTesla.mudarTela("convidados");
    }

    @FXML
    private void clicarCancelar(ActionEvent event) {
        txtNome.clear();
        txtData.clear();
        txtTelefone.clear();
        txtEmail.clear();
    }
    
    public void alertAdicionado(){
        
        Alert alertAdd = new Alert(Alert.AlertType.INFORMATION);
        alertAdd.setTitle("Painel de Controle - Convidado Adicionado");
        alertAdd.setHeaderText("Convidado Adicionado");
        alertAdd.setContentText("O convidado foi adicionado em sua lista de convidados.");
        alertAdd.show();
    }
    
    public void alertNomeVazio(){
        
        Alert alertNVazio = new Alert(Alert.AlertType.ERROR);
        alertNVazio.setTitle("Painel de Controle - Erro 01");
        alertNVazio.setHeaderText("Nome não informado");
        alertNVazio.setContentText("O processo não foi concluído pois o campo do nome está vazio. Preencha-o!");
        alertNVazio.show();
    }
    
    public void alertDataVazia(){
        
        Alert alertDVazia = new Alert(Alert.AlertType.ERROR);
        alertDVazia.setTitle("Painel de Controle - Erro 02");
        alertDVazia.setHeaderText("Data de nascimento não informada");
        alertDVazia.setContentText("O processo não foi concluído pois o campo da data de nascimento está vazio. Preencha-o!");
        alertDVazia.show();
    }
    
    public void alertTelefoneVazio(){
        
        Alert alertTVazio = new Alert(Alert.AlertType.ERROR);
        alertTVazio.setTitle("Painel de Controle - Erro 03");
        alertTVazio.setHeaderText("Telefone não informado");
        alertTVazio.setContentText("O processo não foi concluído pois o campo do telefone está vazio. Preencha-o!");
        alertTVazio.show();
    }
    
    public void alertEmailVazio(){
        
        Alert alertEVazio = new Alert(Alert.AlertType.ERROR);
        alertEVazio.setTitle("Painel de Controle - Erro 04");
        alertEVazio.setHeaderText("Email não informado");
        alertEVazio.setContentText("O processo não foi concluído pois o campo do email está vazio. Preencha-o!");
        alertEVazio.show();
    }
}

Convidados.java:

package encontrotesla;

public class Convidados {
    
    private String nome;
    private String data;
    private String telefone;
    private String email;

    public Convidados(String nome, String data, String telefone, String email) {
        this.nome = nome;
        this.data = data;
        this.telefone = telefone;
        this.email = email;
    }
    
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
    return getNome() + " : " + getTelefone();
    }
    
}
package encontrotesla;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *
 * @author conta
 */
public class EncontroTesla extends Application {
    
    private static Stage stagePrincipal;
    private static Scene telaInicial;

    private static Scene telaConvidados;
                static FXMLAddConvidadoController fxmlAddConvidadoController; // <--- (2)

    private static Scene telaAddConvidado;
    
    @Override
    public void start(Stage stage) throws Exception{
        stagePrincipal = stage;
        
        stage.setTitle("Painel de Controle - Encontro Tesla");
        stage.setMaximized(true);
  
// (1) *******************************
// Basta fazer o mesmo que o bloco (3) para ter acesso ao Controller
      
        Parent telaPrincipal = FXMLLoader.load(getClass().getResource("FXMLTelaInicial.fxml"));
        telaInicial = new Scene(telaPrincipal);
        

   // (2) **************************************
   // Basta fazer o mesmo que o bloco (3) para ter acesso ao Controller
   Parent telaDosConvidados = 
   FXMLLoader.load(getClass().getResource("FXMLConvidados.fxml"));
    telaConvidados = new Scene(telaDosConvidados);


  //(3) *********************************************    
  // **********************************   
        FXMLLoader fxml_telaAddDosConvidados = new FXMLLoader( getClass().getResource("FXMLAddConvidados.fxml"));
   
        fxmlAddConvidadoController = fxml_telaAddDosConvidados.getController();            

        Parent telaDosAddConvidados = fxml_telaDosAddConvidados.load();            
        telaAddConvidado = new Scene(telaDosAddConvidados);


        stage.setScene(telaInicial);
        stage.show();
    }


public static void mudarTela(String click){
        switch(click){
            case "convidados":
                stagePrincipal.setScene(telaConvidados);
                break;
            case "addConvidado":
                stagePrincipal.setScene(telaAddConvidado);
                break;
            case "voltar":
                stagePrincipal.setScene(telaInicial);
                break;
        }
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}

Caso não tenha ficado entendivel, posta seu projeto NetBeans zipado, que assim que puder vejo.

Mas em tese é assim, voce precisa ter acesso ao Controller, então poderá ler e passar qualquer variavel ou mesmo chamar qualquer metodo acessivel.

programa.zip (49,9,KB)

Tentei seguir o que falaste mas não consegui resolver o erro. O erro só acontece quando clico em “adicionar convidado” e tento repassar o ArrayList para a página que está a lista de convidados. Sei que se eu usasse banco de dados provavelmente seria muito mais fácil, porém ainda não tenho conhecimento para isso.

Ok qualquer duvida sobre o que vc quer de fato fazer Eu pergunto, porque pra tentar resolver preciso entender bem o que queres.

EncontroTesla2.zip (50,5,KB)

Entao…

Dá uma olhada nas alterações que realizei.

Normalmente não faço isso aqui no forum, tipo ver todo o projeto por menor que seja e corrigi-lo.

Isso foi uma exceção.

Caso algum dia precise de algo profissional será um prazer atende-lo.

Qualquer coisa posta ai no forum, se Eu não puder resolver algum outro colega poderá faze-lo.

Bons Codigos

1 curtida

Muito obrigado por sua ajuda e disposição. Quebrei muito a cabeça com isso e agora finalmente se resolveu. Vou estudar o código com calma e tentar aplicar em outras funcionalidades. Fica bem, abraços!

1 curtida