Imprimir objetos de um arraylist e seus atributos

Galera, eu sei como imprimir de um arraylist valores adicionados, porém agora estou trabalhando em um caso em que o arraylist possui objetos, e cada um desses objetos seus respectivos atributos, ou seja… Quando eu imprimir o arraylist quero que apareça:
Projeto 1: “Titulo”
“Duracao”
“Orcamento”

Projeto 2: “Titulo”
“Duracao”
“Orcamento”

podem me ajudar?

public class Agencia{
   private ArrayList <Projeto> projetos;
   
   public Agencia(){
      projetos = new ArrayList<>();
   }
   
   public void inserirProjeto(){
      
      String titulo = JOptionPane.showInputDialog("Título do projeto: ");
      double orcamento = Double.parseDouble(JOptionPane.showInputDialog("Orçamento do projeto: "));
      String duracao = JOptionPane.showInputDialog("Duração do projeto");
      String instituicao = JOptionPane.showInputDialog("Insituição: ");
      String areaPesq = JOptionPane.showInputDialog("Área relacionada a pesquisa: ");
      int codProjeto = Integer.parseInt(JOptionPane.showInputDialog("Código do projeto: "));
      Projeto  novoProjeto = new Projeto(titulo, orcamento, duracao, instituicao, areaPesq, codProjeto);
      projetos.add(novoProjeto);
   }
   
   public void listarProjetos(){
        for(Projeto novoProjeto:projetos){
         System.out.println(novoProjeto);
      }
   }
   
   
   public int buscaCodigoProjeto(int codProjeto){
      
      for(int i = 0; i < projetos.size(); i++){
         Projeto projeto = projetos.get(i);
         if(projeto.getCodProjeto() == codProjeto){
            return i;
         }
      }
      return -1;
         
   }
}



import javax.swing.JOptionPane;
public class AgenciaApp{
   public static void main(String args[]){
   
      int menu;
   
      Agencia agencia = new Agencia();
      do {
      
         menu = Integer.parseInt(JOptionPane.showInputDialog("=-=-=-=-= AGENCIA DE PROJETOS =-=-=-=-=\n 1. Inserir um novo projeto;\n 2. Listar todos os projetos;\n 3. Atualizar a avaliação do projeto;\n 4. Excluir um projeto;\n 5. Listar um projeto pelo número; \n 6. Sair."));
      
         if(menu == 1){
            agencia.inserirProjeto();
         }
      
         if(menu == 2){
            agencia.listarProjetos();
         
         } 
      }while(menu != 1 || menu != 2 || menu != 3 || menu != 4);
   
   }   
}

Dessa forma que está o método imprimirLista(), não tá dando erro, porém imprime uma mensagem meio que aleatória…
imprimi algo do tipo Projeto@“Letras e números aleatórios”

Resolvido!