• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

luisaugusto

como por as barras horizontais?

2 mensagens neste tópico

o codigo e de um grafico de barras na vertical mas gostava de saber como o por na horizontal e com as barras a encher, ja tentei montes de vezes e o resultado nunca e o experado

import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;

/**
* *
* grafico.class
* 
* @author Luis Augusto
* @version 1.1.2
* 
*/


public class grafico extends Applet {

        String fValores = " "; //variavel para guardar o nome do ficheiro de valores
        String fTexto = " "; //varialvel para guardar o nome do ficheiro de texto
        String pasta = " "; //variavel para guardar o nome da pasta
        
        String[ ] arrTexto = new String[10]; //guarda o texto que ta em cada linha
        int[ ] arrValores = new int[10];//guarda os valores usa-se int porque os numeros sao inteiros
        
        int numOP = 0;
        int Xinit = 60;
        int Yinit = 348;
        int ValorTotal = 0;
        int largCol = 30; //largura da coluna
        
        int R[ ] = {0,50,100,150,200,250};
        int G[ ] = {250,200,150,100,50,0};
        int B[ ] = {0,50,100,150,200,250};
        
public void init() {

    pasta = getParameter("Pasta");  //sao os parametros
    
    String fv = getParameter("FicheiroValores");
    String ft = getParameter("FicheiroTexto");
    
    fValores = pasta + "/" +fv;
    fTexto = pasta +"/" +ft;
    
    if ( getWidth() != 420 || getHeight() != 480)
            setSize(420,480);
            
    LerFicheiros();
    
}// fecho do init 

public void start() { }


public void stop() { }


public void LerFicheiros () {

        String LinhaV, LinhaT;
        URL urlValores = null;
        URL urlTexto = null;
        
        try {  //usa-se para o caso de o programa nao encontrar o endereço e assim nao deixa de funcionar
            
            urlValores = new URL ( getCodeBase( ).toString( ) + fValores );
            
        }
        
        catch (MalformedURLException except1) {
            
        }
        
         try {
            
            urlTexto = new URL ( getCodeBase().toString() + fTexto );
            
        }
        
        catch (MalformedURLException except2) {
            
        }
        
        try { 
            
            //cria uma variavel de entrsda de dados que vai guardar os dados do fichiro representado pela variavel urlValores
            
            InputStream file_1 = urlValores.openStream();
            BufferedReader lerfv = new BufferedReader ( new InputStreamReader(file_1));
            
            //cria uma variavel de entrsda de dados que vai guardar os dados do fichiro representado pela variavel urlTexto
            
            InputStream file_2 = urlTexto.openStream();
            BufferedReader lerft = new BufferedReader ( new InputStreamReader(file_2));
            
            
            
            while ( ( LinhaV = lerfv.readLine())!= null ) {
                
                arrValores[numOP] = Integer.valueOf(LinhaV);
                ValorTotal += Integer.valueOf(LinhaV);
                ++numOP;
                
            }
            
            int Aux = 0;
            
            while ( ( LinhaT = lerft.readLine()) != null ) { 
                
                arrTexto[Aux] = LinhaT;
                ++Aux;
                
            }
            
            //fecho das streams
            file_1.close();
            file_2.close();
            
        }//fecho do try
        
        catch (IOException except3) {
            
        }
        
    }// fecho do metodo lerFicheiros
    
public void paint (Graphics g) {

        g.setColor(Color.white);
        g.fillRect(0,0,400,400);
        
        g.setColor(new Color(0,50,100)); //azul escuro
        Font titulo = new Font("Verdana",Font.BOLD,20);
        Font subtitulo = new Font("Verdana",Font.BOLD,12);
        
        g.setFont(titulo);
        g.drawString("Grafico",110,30);
        
        g.setColor(new Color(0,100,150)); //azul celeste
        g.setFont(subtitulo);
        g.drawString("Votação - A melhor linguagem de Programação?",40,50);
        
        g.setColor(new Color(0,50,100));
        g.drawLine(10,60,392,60);
        g.drawLine(10,62,392,60);
        g.drawRect(2,2,400,470);
        g.drawRect(4,4,396,466);
        
        //eixos do grafico
        g.setColor(Color.black);
        g.drawLine(50,350,50,90);
        g.drawLine(50,350,350,350);
        
        //seta do eixo dos yy
        int arrX1[] = {45,55,50};
        int arrY1[] = {90,90,80};
        
        //seta do eixo dos xx
        int arrX2[] = {350,350,360};
        int arrY2[] = {345,355,350};
        
        g.fillPolygon(arrX1,arrY1,3);
        g.fillPolygon(arrX2,arrY2,3);
        
        Font Valores = new Font("Verdana",Font.BOLD,10);
        g.setFont(Valores);
        
        int altura = 0, coordX = 0, coordY = 0;
        double AuxPer, AuxD;
        
        for (int X = 0; X < numOP; ++X) {
            
             g.setColor(new Color(R[X],G[X],B[X])); // para variar as cores
             AuxPer = arrValores[X]*100/ValorTotal;
             AuxD = AuxPer * 2.4; //utiliza-se para aumentar as barras
             
             altura = (int) AuxD;
             coordX = Xinit + (  X * largCol + 10 * X);
             coordY = Yinit - altura;
             g.fillRect(coordX,coordY,largCol,altura);//define a barra do grafico
             g.fillRect(Xinit+30,((Yinit+20)+15*X),10,10); // Quadrados da legenda
             
             g.setColor(Color.black);
             
             g.drawString (String.valueOf (AuxPer) + "%", coordX, coordY - 5 );
             
             //Texto da legenda
             g.drawString (arrTexto[X] ,Xinit + 45, ( (Yinit+30) + X * 15) );
             
            }//fecho do for
        }//fecho do paint
        
public void destroy() { }

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo pouco tempo que tive para analisar o teu código, diria que podes começar por optimizar algumas coisas, nomeadamente os blocos try/catch que penso serem redundantes. Deves também colocar sempre código dentro do catch para que caso alguma excepção seja gerada saberes ao certo que excepção ocorreu e qual o comportamento que queres que o teu programa tenha quando seja apanhada determinada excepção (o programa deve terminar ou continuar?). Em baixo podes ver o teu código que alterei no método LerFicheiros() e espero que consigas ter melhores resultados a partir daqui. Deves igualmente fechar as streams dentro de um bloco finally e não dentro de um try como tinhas.

package testes;

import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;

/**
* *
* grafico.class
* 
* @author Luis Augusto
* @version 1.1.2
* 
*/

public class grafico extends Applet {

        String fValores = " "; //variavel para guardar o nome do ficheiro de valores
        String fTexto = " "; //varialvel para guardar o nome do ficheiro de texto
        String pasta = " "; //variavel para guardar o nome da pasta
        
        String[ ] arrTexto = new String[10]; //guarda o texto que ta em cada linha
        int[ ] arrValores = new int[10];//guarda os valores usa-se int porque os numeros sao inteiros
        
        int numOP = 0;
        int Xinit = 60;
        int Yinit = 348;
        int ValorTotal = 0;
        int largCol = 30; //largura da coluna
        
        int R[ ] = {0,50,100,150,200,250};
        int G[ ] = {250,200,150,100,50,0};
        int B[ ] = {0,50,100,150,200,250};
        
public void init() {

    pasta = getParameter("Pasta");  //sao os parametros
    
    String fv = getParameter("FicheiroValores");
    String ft = getParameter("FicheiroTexto");
    
    fValores = pasta + "/" +fv;
    fTexto = pasta +"/" +ft;
    
    if ( getWidth() != 420 || getHeight() != 480)
            setSize(420,480);
            
    LerFicheiros();
    
}// fecho do init 

public void start() { }


public void stop() { }


public void LerFicheiros () {

        String LinhaV, LinhaT;
        URL urlValores = null;
        URL urlTexto = null;
        InputStream file_1 = null;
        InputStream file_2 = null;
        
        try 
        {  //usa-se para o caso de o programa nao encontrar o endereço e assim nao deixa de funcionar
            urlValores = new URL ( getCodeBase( ).toString( ) + fValores );
            urlTexto = new URL ( getCodeBase().toString() + fTexto );
            //cria uma variavel de entrsda de dados que vai guardar os dados do fichiro representado pela variavel urlValores

            file_1 = urlValores.openStream();
            BufferedReader lerfv = new BufferedReader ( new InputStreamReader(file_1));
            
            //cria uma variavel de entrsda de dados que vai guardar os dados do fichiro representado pela variavel urlTexto
            
            file_2 = urlTexto.openStream();
            BufferedReader lerft = new BufferedReader ( new InputStreamReader(file_2));
            
            while ( ( LinhaV = lerfv.readLine())!= null ) 
            {
                arrValores[numOP] = Integer.valueOf(LinhaV);
                ValorTotal += Integer.valueOf(LinhaV);
                ++numOP;
            }
            int Aux = 0;
            while ( ( LinhaT = lerft.readLine()) != null ) 
            { 
                arrTexto[Aux] = LinhaT;
                ++Aux;
            }
        }//fecho do try
        catch (IOException e) 
        {
        	e.printStackTrace();
        }
        finally
        {
        	try
        	{
        		if (file_1 != null)
        			file_1.close();
        		if (file_2 != null)
        			file_2.close();
        	}
        	catch(IOException e)
        	{
        		e.printStackTrace();
        	}
        }
    }// fecho do metodo lerFicheiros
    
public void paint (Graphics g) {

        g.setColor(Color.white);
        g.fillRect(0,0,400,400);
        
        g.setColor(new Color(0,50,100)); //azul escuro
        Font titulo = new Font("Verdana",Font.BOLD,20);
        Font subtitulo = new Font("Verdana",Font.BOLD,12);
        
        g.setFont(titulo);
        g.drawString("Grafico",110,30);
        
        g.setColor(new Color(0,100,150)); //azul celeste
        g.setFont(subtitulo);
        g.drawString("Votação - A melhor linguagem de Programação?",40,50);
        
        g.setColor(new Color(0,50,100));
        g.drawLine(10,60,392,60);
        g.drawLine(10,62,392,60);
        g.drawRect(2,2,400,470);
        g.drawRect(4,4,396,466);
        
        //eixos do grafico
        g.setColor(Color.black);
        g.drawLine(50,350,50,90);
        g.drawLine(50,350,350,350);
        
        //seta do eixo dos yy
        int arrX1[] = {45,55,50};
        int arrY1[] = {90,90,80};
        
        //seta do eixo dos xx
        int arrX2[] = {350,350,360};
        int arrY2[] = {345,355,350};
        
        g.fillPolygon(arrX1,arrY1,3);
        g.fillPolygon(arrX2,arrY2,3);
        
        Font Valores = new Font("Verdana",Font.BOLD,10);
        g.setFont(Valores);
        
        int altura = 0, coordX = 0, coordY = 0;
        double AuxPer, AuxD;
        
        for (int X = 0; X < numOP; ++X) {
            
             g.setColor(new Color(R[X],G[X],B[X])); // para variar as cores
             AuxPer = arrValores[X]*100/ValorTotal;
             AuxD = AuxPer * 2.4; //utiliza-se para aumentar as barras
             
             altura = (int) AuxD;
             coordX = Xinit + (  X * largCol + 10 * X);
             coordY = Yinit - altura;
             g.fillRect(coordX,coordY,largCol,altura);//define a barra do grafico
             g.fillRect(Xinit+30,((Yinit+20)+15*X),10,10); // Quadrados da legenda
             
             g.setColor(Color.black);
             
             g.drawString (String.valueOf (AuxPer) + "%", coordX, coordY - 5 );
             
             //Texto da legenda
             g.drawString (arrTexto[X] ,Xinit + 45, ( (Yinit+30) + X * 15) );
             
            }//fecho do for
        }//fecho do paint
        
public void destroy() { }

}

Sugiro também que uses um bom IDE de Java (eclipse, intelli J por exemplo) e faças debug da tua aplicação para veres exactamente o comportamento que a tua aplicação está a ter e o que esperas que ela faça. Assim que tiver mais tempo vejo o teu código mais a fundo  ;) Podes colocar aqui o teu ficheiro de valores para testar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora