Mostrar objeto em JTextArea

Como faço para o objeto realLista aparecer na na jTextArea.

ListaLigada realLista = new ListaLigada();

Para mostra no painel de console é só colocar assim: realLista.MostrarLista(); que aparece.

Mais e na jTextArea?

Vc pega o nome da variavel do campo JTextArea e manda setar o texto nele pelo setText(“valor”);

Ex.:

jtextarea.setText(realLista.MostrarLista());;

:smiley:

Já fiz isso só que dá o seguinte erro:

‘void’ type not allowed here

Mostra o que este metodo faz. Se ele é void então retorna nada, vc vai setar nada?

É o código de uma lista encadeada

[code]class No
{
int elemento;
No prox;

No (int elem){
	elemento = elem;
	prox = null;
}

}

class ListaLigada
{
No primeiro, ultimo;

ListaLigada ()
{
	primeiro = null;
	ultimo = null;
}

public boolean ListaVazia()
{
	if (primeiro == null && ultimo == null)
	{
		return true;
	}
	return false;
}

public void InserirInicio(No novoNo)
{
	if (ListaVazia())
	{
		ultimo = novoNo;
	}
	else
	{
		novoNo.prox = primeiro;
	}
	primeiro = novoNo;
}

public void InserirFinal(No novoNo)
{
	if (ListaVazia())
	{
		primeiro = novoNo;
	}
	else
	{
		ultimo.prox = novoNo;
	}
	ultimo = novoNo;
}

public int ContarNos()
{
	int tamanho = 0;
	No NoTemp = primeiro;
	
	while (NoTemp !=null)
	{
		tamanho = tamanho+1;
		NoTemp = NoTemp.prox;
	}
	return tamanho;
}

public void InserirMeio(No NovoNo, int posicao)
{
	No NoTemp = primeiro;
	int NroNos, posAux = 1;
	
	NroNos = ContarNos();
	
	if(posicao <= 1)
	{
		InserirInicio(NovoNo);
	}
	else
	{
		if (posicao > NroNos)
		{
			InserirFinal(NovoNo);
		}
		else
		{
			while (posAux < (posicao -1))
			{
				NoTemp = NoTemp.prox;
				posAux = posAux + 1;
			}
			NovoNo.prox = NoTemp.prox;
			NoTemp.prox = NovoNo;
		}
	}
}

public void Remover(int elemento)
{
	No NoTemp = primeiro;
	No NoAnt = null;
	
	if (primeiro.elemento == elemento)
	{
		primeiro = primeiro.prox;
	}
	else
	{
		while (NoTemp !=null && NoTemp.elemento != elemento)
		{
			NoAnt = NoTemp;
			NoTemp = NoTemp.prox;
		}
		
		if(NoTemp != null)
		{
			NoAnt.prox = NoTemp.prox;
		}
		if(NoTemp == ultimo)
		{
			ultimo = NoAnt;
		}
	}
}

public void ElementoInicio()
{
	if(!ListaVazia())
	{
		System.out.println("O primeiro elemento  "+primeiro.elemento);
	}
	else
	{
		System.out.println("Lista ligada vazia");
	}
}

public void ElementoFinal()
{
	if(!ListaVazia())
	{
		System.out.println("O ltimo elemento  "+ultimo.elemento);
	}
	else
	{
		System.out.println("Lista ligada vazia");
	}
}

public No BuscarNo (int elemento)
{
	int i = 1;
	No NoTemp = primeiro;
	
	while (NoTemp !=null)
	{
		if(NoTemp.elemento == elemento)
		{
			System.out.println("No "+ NoTemp.elemento + " posicao " +i);
			return NoTemp;
		}
		i = i +1;
		NoTemp = NoTemp.prox;
	}
	return null;
}

public void MostrarLista()
{
	int i = 1;
	No NoTemp = primeiro;
	
	while (NoTemp !=null)
	{
		System.out.println("Elemento " + NoTemp.elemento + " posicao " +i );
		NoTemp = NoTemp.prox;
		i = i +1;
	}
}

}
[/code]

O seu mostrar lista é do tipo void…
Lógico que ele não vai ter retorno… Então ele não vai colocar nada do jTextArea…
Vai ficar algo do tipo:
(Não testei pq não tenho nenhuma IDE aki)

[code] public String[] MostrarLista()
{
int i = 1;
int cont = 0;
No NoTemp = primeiro;
String [] lista;

     while (NoTemp !=null)  
     {  
         System.out.println("Elemento " + NoTemp.elemento + " posicao " +i );  
         lista[cont] = "Elemento " + NoTemp.elemento + " posicao " +i  + "\n";
         cont = cont +1;
         NoTemp = NoTemp.prox;  
         i = i +1;  
     }  
    return lista;
 } [/code]

Ele vai retornar a lista, que vai ser colocada no jTextArea…

Só complementando o que o Pedro disse, mesmo vc fazendo esse método retornar um String[] vc terá de criar um loop e inserir cada elemento individualmente no jTextArea…

ok?

Na hora que eu pedir para listar os resultados na jTextArea o código fica como?

Assim?

[code] for(int i=0;i<realLista.ContarNos();i++)
{

//O que eu coloco aqui?

    }[/code]

>

[quote=Ziguifrid]Na hora que eu pedir para listar os resultados na jTextArea o código fica como?

Assim?

[code] for(int i=0;i<realLista.ContarNos();i++)
{

//O que eu coloco aqui?

    }[/code]

>[/quote]
Axo que vai ficar algo do tipo:

[code]ListaLigada realLista = new ListaLigada();
String [] pegalista = realLista.MostrarLista();

for(int i=0;i<pegalista.size();i++) { //não sei se é size ou lenght (nao to com nenhuma ide aki)
jTextArea.setText(jTextArea.gettext() + pegalista[i]);
}[/code]

Coloquei este código:

[code] String [] pegalista = realLista.MostrarLista();

    for(int i=0;i<pegalista.length;i++)   { //não sei se é size ou lenght (nao to com nenhuma ide aki)
       jTextArea1.setText(jTextArea1.getText() + pegalista[i]);

}[/code]

Deu este erro:

Elemento 1 posicao 1 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at teste.ListaLigada.MostrarLista(No.java:194) at teste.Principal.jButton6ActionPerformed(Principal.java:269) at teste.Principal.access$500(Principal.java:22) at teste.Principal$6.actionPerformed(Principal.java:104) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) CONSTRUÍDO COM SUCESSO (tempo total: 22 segundos)

Só uma coisa, você me passou este código em uma resposta anterior:

[code]public String[] MostrarLista()
{

        int i = 1;
        int cont = 0;
        No NoTemp = primeiro;
        String [] lista;

 while (NoTemp !=null)
 {
    System.out.println("Elemento " + NoTemp.elemento + " posicao " +i );
     lista[cont] = "Elemento " + NoTemp.elemento + " posicao " +i  + "\n";
     cont = cont +1;
     NoTemp = NoTemp.prox;
     i = i +1;

 }

return lista;
}[/code]

Estava dando erro na linha:

String [] lista;

Dizia que a variável não podia ser inicializada.
Então eu fiz isso:

String [] lista=null;

Está errado isso aí em cima?

Já que o erro apontado na primeira linha é:

at teste.ListaLigada.MostrarLista(No.java:194)

Que é exatamente está linha:

lista[cont] = "Elemento " + NoTemp.elemento + " posicao " +i + "\n";>

em lista[cont] = "Elemento " etc etc
você está tentando usar a variável lista, que aqui: “String [] lista=null” você declarou como null.
Lembre-se que vetores em java são sempre objetos, por tanto você precisa iniciar ele antes de usar
coloque String[] lista = new String[100]; por exemplo.

Legal CrOnNoS funcionou.

Agora mais uma coisa.

Tem como eu pegar o tamanho da minha lista e jogar no lugar do 100 do exemplo que você passou, ou seja, não pré-determinar um tamanho.

String[] lista = new String[100];

Você pode deixar pra criar o vetor apenas depois de ter certeza do seu tamanho (não pode utilizar ele antes disso neste caso).
Se você precisa usar o vetor antes de saber o seu tamanho, então você precisa de um vetor dinâmico.
Em java você tem estruturas de dados de tamanho dinâmico através das Collection. ArrayList no caso é uma Collection que tem o mesmo comportamento do vetor que você estava usando mas de tamanho dinâmico. Então bastaria criar ele com:
List lista = new ArrayList();

Veja como não precisa especificar tamanho porque a implementação das Collection já cuida disso.

E tem como pegar os valores do objeto realLista e transportar para um ArrayList?

ListaLigada realLista = new ListaLigada();

Ou tenho que realmente que armazenar esses valores em uma ArrayList para depois adicionar a um vetor?

E se não tiver como pegar os valores do objeto realLista e transportar para um ArrayList, tipo eu farei um código assim para pegar os valores:

O código abaixo seria para gravar os valores.

 
List<Integer> ln = new ArrayList<Integer>();

 n=Integer.parseInt(jTextField2.getText());
        ln.add(Integer.valueOf(n));
        jTextField2.setText("");

O problema é que o código para gravar é assim:

try{
 n=Integer.parseInt(jTextField2.getText());
     realLista.InserirFinal(new No(n));
        jTextField2.setText("");


}

     catch (Exception e) {

     JOptionPane.showMessageDialog(null,"Insira um número.");

    }

Como vou fazer a função:

realLista.InserirFinal(new No(n));

Ser chamada usando o método de inserir valores em uma ArrayList?

“Ou tenho que realmente que armazenar esses valores em uma ArrayList para depois adicionar a um vetor?”

Não entendi bem qual problema que apareceu agora.
O ArrayList funciona exatamente como o vetor mas é dinâmico, para substituir seu vetor basta:

  • trocar a declaração dele pela que citei a cima
  • onde você atribui valores como “lista[i] = 10” você subistituiria simplesmente por “lista.add(10)”
  • onde você lê valores como “print(lista[10])” você substituiria por “print(lista.get(10))”
  • onde você usa em vetor lista.length, você vai ter que trocar por lista.size()

Pelo que eu entendi CrOnNoS você está sugerindo que eu use apenas a ArrayList para adicionar valores e remover.

Só que a pergunta é:

Como usar uma ArrayList e usar ao mesmo tempo também o código da lista encadedada, que eu postei em uma resposta acima.

Por isso que eu perguntei se tem como pegar os valores do objeto realLista e transportar para um ArrayList?

Ou tenho que realmente que armazenar esses valores em uma ArrayList para depois adicionar a um vetor?

Digo isso por que para usar o código do quicksort para ordenar valores eu usei o seguinte código.

[code]List ln = new ArrayList();
Integer vetor[];

vetor = new Integer[ln.size()];
for(int i=0;i<ln.size();i++)
{
vetor[i] = ln.get(i);
}
QuickSort> qs = new QuickSort();
qs.sort(vetor);

    for(int i=0;i<ln.size();i++)
    {
        System.out.println(vetor[i]);
    }[/code]

Frente disso surgiu a dúvida:

Como adicionar valores a ArrayList e ao mesmo tempo chamar a função (InserirFinal)?

Já que no modo que está agora o código para adicionar valores é:

[code]try{
n=Integer.parseInt(jTextField2.getText());
realLista.InserirFinal(new No(n));
jTextField2.setText("");

}

  catch (Exception e) {  

  JOptionPane.showMessageDialog(null,"Insira um número."); [/code]

Que no caso chama está função do código da lista encadeada:

public void InserirFinal(No novoNo) { if (ListaVazia()) { primeiro = novoNo; } else { ultimo.prox = novoNo; } ultimo = novoNo; }>

Como eu dissee…
Podia ter uns errinhos, já que eu tava sem IDE…
O importante é que foi resolvido…

[quote=pedroroxd]Como eu dissee…
Podia ter uns errinhos, já que eu tava sem IDE…
O importante é que foi resolvido…[/quote]

É isso aí, valeu pela ajuda.