Criar uma janela única

3 respostas
M

Pessoal, gostaria de saber como faço para criar uma única janela para mostrar os resultados. Eu fiz um programa sobre Produtor e Consumidor. Utilizei a saída simples (system.out.println). Gostaria de saber como criar somente uma janela que mostre os resultados, já que estes são contínuos.

Não entendo muito dessa parte de interface gráfica. Tentei usando o JOptionPane, mas ficou uma grande bagunça. A cada processo abria uma janelinha…hehe. Gostaria de que os todos os resultados aparecessem numa mesma janela.

3 Respostas

robson_costa

cria um atributo do tipo StringBuffer (caso o controle do acesso concorrente esteje bom use entao StringBuilder) e adicione as mensagens assim:

dai depois de todo o processamento e só mostrar os resultados assim:

M

Acho que não entendi muito bem. Eu tentei fazer como você falou, mas não consegui:

import javax.swing.JOptionPane;

public class Prod_Cons {
	static int buffer[] = new int[500];
	static int posicao  = 0;
	static	Produtor p1 = new Produtor();
	static	Produtor p2 = new Produtor();
	static	Consumidor c = new Consumidor();
	
	public static void main(String[] args) {
		p1.start();
		p2.start();
		c.start();
	}
	
	synchronized static public void insereDadosBuffer(int dado){
	   if(posicao == 0){
	   	StringBuffer str = new StringBuffer();
		   if(buffer[posicao] != 0){
		     posicao++;
		   }
	   }else{
		   posicao++;
	   }
	   buffer[posicao] = dado;
	   str.append("Insere no buffer: " + dado + " na posicao: " + posicao);
	   
	}
	
	synchronized static public void removeDadosBuffer(){
		StringBuffer str = new StringBuffer();
		str.append("remove do buffer: " + buffer[posicao] + " na posicao: " + posicao);
		buffer[posicao] = 0;
		posicao--;
	}
	
	JOptionPane.showMessageDialog(null, str, "Produtor x Consumidor", JOptionPane.INFORMATION_MESSAGE);
	
	synchronized static public int getPosicao(){
		return posicao;
	}
		

static class Produtor extends Thread {
	public void run(){
		while(Prod_Cons.getPosicao() < 1000){
			Prod_Cons.insereDadosBuffer(1);
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}


static class Consumidor extends Thread{
	public void run(){
		while(true){
			if(Prod_Cons.getPosicao() == 0){
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}	
				continue;
			}
			Prod_Cons.removeDadosBuffer();
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}
}
gpd38

Da uma olhada nesta classe do swing que existe algumas opções boas

import javax.swing.JTextArea;

JTextArea janela = new JTextArea();
String saida="";
//----------------------------------------------



saida = siada + " O que for mostra para o usuario ";



//-----------------------------------------------
janela.setText(saida);
JOptionPane.showMessageDialog(null,janela,"TITULO",JOptionPane.INFORMATION_MESSAGE);

Espero que goste.

Criado 6 de abril de 2008
Ultima resposta 7 de abr. de 2008
Respostas 3
Participantes 3