Mostrar objeto em JTextArea

17 respostas
Ziguifrid

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?

17 Respostas

hiarlay

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

Ex.:

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

:smiley:

Ziguifrid

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

‘void’ type not allowed here

hiarlay

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

Ziguifrid

É o código de uma lista encadeada

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;
		}
	}
}
pedroroxd

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)

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;
     }
Ele vai retornar a lista, que vai ser colocada no jTextArea...
renamed

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?

Ziguifrid

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

Assim?

for(int i=0;i<realLista.ContarNos();i++)
        {
           
//O que eu coloco aqui?
      
        }

>

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

Assim?

for(int i=0;i<realLista.ContarNos();i++)
        {
           
//O que eu coloco aqui?
      
        }
>
Axo que vai ficar algo do tipo:
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]);
}
Ziguifrid

Coloquei este código:

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]);
 }

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:

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;
}
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";
>
CrOnNoS

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.

Ziguifrid

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];
CrOnNoS

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.

Ziguifrid

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?

CrOnNoS

“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()
Ziguifrid

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.

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

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

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

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 é:

try{  
 n=Integer.parseInt(jTextField2.getText());  
      realLista.InserirFinal(new No(n));  
         jTextField2.setText("");  
   
   
 }  
   
      catch (Exception e) {  
   
      JOptionPane.showMessageDialog(null,"Insira um número.");

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;
	}
>
pedroroxd

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

Ziguifrid

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

É isso aí, valeu pela ajuda.

Criado 13 de dezembro de 2009
Ultima resposta 15 de dez. de 2009
Respostas 17
Participantes 5