Como consigo pegar um valor específico dentro de um ArrayList?

Pessoal, estou desenvolvendo um “fórum” em JavaFX e há uma aba específica para mostrar o conteúdo de um post. Porém, no método que fiz para obter todas as informações do post, há muitas coisas e quero que apareça apenas o conteúdo. Como posso fazer isso?

Classe Post:

package matforum.models;

public class Post {
    private String titulo;
    private String descricao;
    private String conteudo;
    private String referencia;
    private String autor;
    private String dataPostagem;

    public Post(String titulo, String descricao, String conteudo, String referencia, String autor, String dataPostagem) {
        this.titulo = titulo;
        this.descricao = descricao;
        this.conteudo = conteudo;
        this.referencia = referencia;
        this.autor = autor;
        this.dataPostagem = dataPostagem;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getConteudo() {
        return conteudo;
    }

    public void setConteudo(String conteudo) {
        this.conteudo = conteudo;
    }

    public String getReferencia() {
        return referencia;
    }

    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }

    public String getAutor() {
        return autor;
    }

    public void setAutor(String autor) {
        this.autor = autor;
    }

    public String getDataPostagem() {
        return dataPostagem;
    }

    public void setDataPostagem(String dataPostagem) {
        this.dataPostagem = dataPostagem;
    }

    @Override
    public String toString() {
        return "\nTitulo: " + titulo + "\nDescricao: " + descricao +
        "\nConteudo: " + conteudo + "\nReferencia: " + referencia +
        "\nAutor: " + autor + "\nData: " + dataPostagem +"\n";
    }
    
}

Como está fazendo a exibição? Mostre o código de onde exibe o post nessa aba.

Pelo código da sua classe Post, seria o caso de chamar o metodo getConteudo(), que suponho ser o conteúdo que você deseja.

Se não é isso, seja mais claro na dúvida.

Abraço.

Eu pensei em fazer isso mas quando tento usar o getConteudo() ele simplesmente diz que é inválido - não existe. Irei deixar o código aqui (ele não tá bem estruturado, faltam algumas coisas e, a principio, ele iria carregar o conteúdo ao clicar no botão “perfil” - apenas para teste). O código:

FXMLPostagemController:

package matforum;

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;
import javafx.scene.control.TextArea;
import static matforum.FXMLCriarPostController.postagens;

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

    @FXML
    private Button btnSair;
    @FXML
    private Button btnVoltar;
    @FXML
    private Label lblTituloPost;
    @FXML
    private TextArea txtConteudoPost;
    @FXML
    private Label lblData;
    @FXML
    private Label lblAutor;
    @FXML
    private Button btnPerfil;
    @FXML
    private Label lblPerfilIndisponivel;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        txtConteudoPost.setWrapText(true);
    }    

    @FXML
    private void clickPerfil(ActionEvent event) {
        lblPerfilIndisponivel.setOpacity(1);
        txtConteudoPost.setText(postagens.getConteudo());
    }
    
    @FXML
    private void clickSair(ActionEvent event) {
        MATForum.mudarTela("inicio");
        FXMLTelaInicialController.logado = false;
    }

    @FXML
    private void clickVoltar(ActionEvent event) {
        
        if(FXMLTelaInicialController.logado == true){
        MATForum.mudarTela("principal");
        }else{
        MATForum.mudarTela("inicio");
        }
    }
}

Onde está a declaração e a inicialização da variável postagens?

postagens é o ArrayList que está coletando todas as informações de um post. Irei deixar aqui a classe que ela está.

FXMLCriarPostController:

package matforum;

import java.net.URL;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import static java.util.concurrent.TimeUnit.SECONDS;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.image.ImageView;
import matforum.models.Post;

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

    @FXML
    private Button btnSair;
    @FXML
    private Button btnVoltar;
    @FXML
    private TextField txtTitulo;
    @FXML
    private TextField txtDescricao;
    @FXML
    private TextArea txtConteudo;
    @FXML
    private TextField txtReferencia;
    @FXML
    private TextField txtAutor;
    @FXML
    private TextField txtData;
    @FXML
    private Button btnEnviar;
    @FXML
    private Button btnPerfil;
    @FXML
    private Label lblPerfilIndisponivel;
    
    public static String titulo = null;
    public static String descricao = null;
    public static String conteudo = null;
    public static String referencia = null;
    public static String autor = null;
    public static String dataPostagem = null;
    
    public static ArrayList<Post> postagens = new ArrayList();
    @FXML
    private Button btnAutor;
    @FXML
    private Button btnData;
    @FXML
    private ImageView imagemConfirmado;
    @FXML
    private Label lblConfirmado;
    @FXML
    private ImageView imagemErro;
    @FXML
    private Label lblErroTituloVazio;
    @FXML
    private Label lblErroDescricaoVazia;
    @FXML
    private Label lblErroConteudoVazio;
    @FXML
    private Label lblErroAutorVazio;
    @FXML
    private Label lblErroDataVazia;
    @FXML
    private Label lblErroPostVazio;
    
    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        txtConteudo.setWrapText(true);
    }

    @FXML
    private void clickSair(ActionEvent event) {
        MATForum.mudarTela("inicio");
        limparDados();
        FXMLTelaInicialController.logado = false;
    }

    @FXML
    private void clickVoltar(ActionEvent event) {
        MATForum.mudarTela("principal");
        limparDados();
    }

    @FXML
    private void clickEnviar(ActionEvent event) {
        criarPost();
    }
    
    @FXML
    private void clickPerfil(ActionEvent event) {
        contagemPerfilIndisponivel();
    }
    
    @FXML
    private void clickAutor(ActionEvent event) {
        carregarAutor();
    }

    @FXML
    private void clickData(ActionEvent event) {
        coletarData();
    }
    
    public void coletarData(){
        LocalDateTime dataHoje = LocalDateTime.now();

        DateTimeFormatter formatterData = DateTimeFormatter.ofPattern("dd/MM/uuuu");
        String dataFormatada = formatterData.format(dataHoje);
        
        System.out.println(dataFormatada);
        
        txtData.setEditable(true);
        txtData.setText(dataFormatada);
        txtData.setEditable(false);
    }
    
    public void criarPost(){
        titulo = txtTitulo.getText();
        descricao = txtDescricao.getText();
        conteudo = txtConteudo.getText();
        referencia = txtReferencia.getText();
        autor = txtAutor.getText();
        dataPostagem = txtData.getText();
        
        if("".trim().equals(referencia)){
            referencia = "Nenhuma";
        }
        
        if("".trim().equals(titulo) && "".trim().equals(descricao) && "".trim().equals(conteudo) &&
        "".trim().equals(autor) && "".trim().equals(dataPostagem)){
            imagemErro.setOpacity(1);
            lblErroPostVazio.setOpacity(1);
            contagemErros();
        }else if("".trim().equals(titulo)){
            imagemErro.setOpacity(1);
            lblErroTituloVazio.setOpacity(1);
            contagemErros();
        }else if("".trim().equals(descricao)){
            imagemErro.setOpacity(1);
            lblErroDescricaoVazia.setOpacity(1);
            contagemErros();
        }else if("".trim().equals(conteudo)){
            imagemErro.setOpacity(1);
            lblErroConteudoVazio.setOpacity(1);
            contagemErros();
        }else if("".trim().equals(autor)){
            imagemErro.setOpacity(1);
            lblErroAutorVazio.setOpacity(1);
            contagemErros();
        }else if("".trim().equals(dataPostagem)){
            imagemErro.setOpacity(1);
            lblErroDataVazia.setOpacity(1);
            contagemErros();
        }else{
            imagemConfirmado.setOpacity(1);
            lblConfirmado.setOpacity(1);
            contagemCadastrado();
            
            Post novoPost = new Post(titulo, descricao, conteudo, referencia, autor, dataPostagem);
            postagens.add(novoPost);
            System.out.println(postagens);
            limparDados();
        }
        
    }
    
    public void contagemPerfilIndisponivel(){
        final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        final Runnable runnable = new Runnable() {
            int countdownStarter = 5;

            @Override
            public void run() {
                
                lblPerfilIndisponivel.setOpacity(1);
                countdownStarter--;

                if (countdownStarter < 0) {
                    lblPerfilIndisponivel.setOpacity(0);
                    scheduler.shutdown();
                }
            }
        };
        scheduler.scheduleAtFixedRate(runnable, 0, 1, SECONDS);
    }
    
    public void limparDados(){
        txtTitulo.clear();
        txtDescricao.clear();
        txtConteudo.clear();
        txtReferencia.clear();
        txtAutor.clear();
        txtData.clear();
    }
    
    public void carregarAutor(){
        txtAutor.setEditable(true);
        txtAutor.setText(FXMLTelaInicialController.nomeLogin);
        txtAutor.setEditable(false);
    }
    
    public void contagemErros(){
        final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        final Runnable runnable = new Runnable() {
            int countdownStarter = 5;

            @Override
            public void run() {
                
                countdownStarter--;

                if (countdownStarter < 0) {
                    imagemErro.setOpacity(0);
                    lblErroTituloVazio.setOpacity(0);
                    lblErroDescricaoVazia.setOpacity(0);
                    lblErroConteudoVazio.setOpacity(0);
                    lblErroAutorVazio.setOpacity(0);
                    lblErroDataVazia.setOpacity(0);
                    lblErroPostVazio.setOpacity(0);
                    scheduler.shutdown();
                }
            }
        };
        scheduler.scheduleAtFixedRate(runnable, 0, 1, SECONDS);
    }
    
    public void contagemCadastrado(){
        final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        final Runnable runnable = new Runnable() {
            int countdownStarter = 5;

            @Override
            public void run() {
                
                countdownStarter--;

                if (countdownStarter < 0) {
                    imagemConfirmado.setOpacity(0);
                    lblConfirmado.setOpacity(0);
                    scheduler.shutdown();
                }
            }
        };
        scheduler.scheduleAtFixedRate(runnable, 0, 1, SECONDS);
    }
    
}

Se postagens é um ArrayList, ele não vai ter o método getConteudo(), que pertence à classe Post. Você precisa pegar o objeto de dentro do ArrayList, para depois pegar o conteúdo. Algo como:

Post postQueQueroExibir = postagens.get(0);
txtConteudoPost.setText(postQueQueroExibir.getConteudo());

No exemplo, está pegando a posição zero (a primeira do ArrayList). Você precisa definir o índice que quer pegar através de outros métodos.

Abraço.

1 curtida

Valeu!!!