Ajuda para montar gráficos a partir de um form

4 respostas
dambros

Boa tarde,

Sou iniciante em Java e estou tentando fazer um programinha J2ME bobo que pega 4 valores do usuário e cálcula uma média. Após isso ele desenha um gráfico de barras utilizando a classe Graphics e fillRect, mas enrosquei nessa parte.

Alguém poderia por favor me direcionar melhor?

A parte de desenho está la apenas para teste, não sei como posso fazer para setar a altura como sendo os valores entrado pelos usuário e também não consigo fazer aparecer o resultado da média e os desenhos, sempre aparece ou um ou outro.

Muito obrigado desde já.

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;


public class Graficos extends MIDlet implements CommandListener {
    
    private Command exitCommand; 
    private Command calcularCommand; 
    private Display display;   
    private StringItem la; 
    private TextField ta, tb, tc, td;
    private Form frmMain; 
 
   
            
    public Graficos() {
    	
        display = Display.getDisplay(this);
        frmMain = new Form("Gráficos");
        
        
        exitCommand = new Command("Sair", Command.EXIT, 1);
        calcularCommand = new Command("Calcular", Command.SCREEN, 1);

        ta = ((new TextField("1° Valor: ","", 5, TextField.DECIMAL))); 
        tb = (new TextField("2° Valor: ","", 5, TextField.DECIMAL)); 
        tc = (new TextField("3° Valor: ","", 5, TextField.DECIMAL)); 
        td = (new TextField("4° Valor: ","", 5, TextField.DECIMAL)); 
       
        la = new StringItem("Média: ","");
                    
        frmMain.addCommand(exitCommand);
        frmMain.addCommand(calcularCommand);

        frmMain.append(ta);
        frmMain.append(tb);
        frmMain.append(tc);
        frmMain.append(td);
        frmMain.append(la);

        frmMain.setCommandListener(this);    }
    

    public void startApp() {
    
        display.setCurrent(frmMain); 
       
    }
    
  
    public void pauseApp() {
    }
    
   
    public void destroyApp(boolean unconditional) {
    }
    
       
    public void commandAction(Command c, Displayable s) {
        if (c == exitCommand) {
            destroyApp(false);
            notifyDestroyed();
        }
        else if (c == calcularCommand){
        	float a = Float.parseFloat(ta.getString());
        	float b = Float.parseFloat(tb.getString());
        	float d = Float.parseFloat(tc.getString());
        	float e = Float.parseFloat(td.getString());
        	float media = (a+b+d+e)/4;
        	la.setText(""+media);
        	display.setCurrent(new Draw());
        	 
        	

        	}    
        }
   
    
}

//----------------------

class Draw extends Canvas {

	  public void paint (Graphics g) {
		  
		  
			
		g.setColor (255, 0, 0);
	    g.fillRect (0, 0, 20, 50);
	   
	  }
}

4 Respostas

rafaelSaqueli

A questão de aparecer o texto ou o desenho parece simples. Quando o comando ‘display.setCurrent(new Draw());’ é interpretado, o display passa a pertencer ao novo desenho criado e o texto que esta no “la” que foi adicionado ao form não aparece pois o form “sai de cena”. Quanto ao numero faça assim:

class Draw extends Canvas

{

float a,b,c,d;
// nesse construtor, quando um grafico for criado, será necessário passar os dados vindos do usuário
  public Draw(float a, float b, float c, float d)
 {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
             
  }

  public void paint (Graphics g) 
 {               
    //aki vc usa os valores recebidos como parametro que estao armazenados nas variaveis (a,b,c,d) para setar a altura, largura.. dos retangulos.
                 
    g.setColor (255, 0, 0);  
    g.fillRect (0, 0, 20, a); // aki foi utilizado o valor passado pra a  
     
  }

}

E no momento da criacao do grafico vc faz: display.setCurrent(new Draw(a,b,d,e));
Creio que falei muita coisa desnecessária, mas acredito que seria esta sua dúvida. Vc disse que é iniciante, mas talvez nem tanto.

Att.

dambros

Muito obrigado pelo reply.

Estava pesquisando bastante sobre essa dúvida e vi que realmente não conseguirei usar o desenho junto de um form da forma que implementei, já que como você mesmo disse, meu form sempre sairia de cena.

Talvez pensei em criar uma imagem e passar os valores do gráfico para essa. Estou tentando ver aonde chego.

Obrigado novamente.

P

dambros:
Muito obrigado pelo reply.

Estava pesquisando bastante sobre essa dúvida e vi que realmente não conseguirei usar o desenho junto de um form da forma que implementei, já que como você mesmo disse, meu form sempre sairia de cena.

Talvez pensei em criar uma imagem e passar os valores do gráfico para essa. Estou tentando ver aonde chego.

Obrigado novamente.

Você pode usar um grafico em um form desde que uso a classe certa que neste caso é CustomItem e não Canvas.

O bom disto é que não tem que desenhar a tela toda, apenas a superfície do CustomItem, sendo todo o resto gerenciado pelo Form.

dambros

Consegui desenhar criando uma imagem e então utilizando o Graphics dentro dela, assim utilizei tudo dentro do mesmo form.

Não sei se era a melhor implementação possível, mas deu certo.

Criado 15 de junho de 2009
Ultima resposta 16 de jun. de 2009
Respostas 4
Participantes 3