Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Grafici a torta!!

  1. #1

    Grafici a torta!!

    Salve a tutti, vi espongo subito il mio problema, devo fare un grafico a torta in java, il problema non è il grafico in se per se, perchè quello l'ho già risolto, il difficile è far prendere alle fette della torta i colori che gli passo tramite il DB (database), cerco di spiegarvi meglio.
    Io i dati da inserire dentro al grafico, li prendo tramite una query, quindi utilizzo una lista, a questi valori che passo al grafico, corrisponde un certo colore, ora questo colore deve essere riprodotto dalla fetta della torta che contiene il valore in questione, non ho trovato nulla che possa aiutarmi su internet, voi potete fare qualche cosa?? Uso le librerie JFreeChart (devo usare per forza queste, esigenze di progetto....) grazie in anticipo, attendo risposte spero positive.....
    Emix!!

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ecco qua.. buò bastare o dovevi far qualcosa di più preciso ?

    codice:
    // creo il grafico	
    		JFreeChart chart = ChartFactory.createPieChart3D(
    				titolo,  // chart title
    	            dataset,             // dataset
    	            true,                // include legend
    	            true,
    	            false
    	        );
    	        PiePlot plot = (PiePlot) chart.getPlot();
    	        
    	        // effetto trasparenza
    	        plot.setForegroundAlpha(0.8f);
    	        
    	        // colori personalizzati
    	        Color[] colors = {new Color(255,92,255), new Color(92,255,255), Color.orange, new Color(255,178,178), new Color(255,92,92), new Color(92,92,255), new Color(92,255,92), new Color(255,255,92), Color.lightGray};      
    	        PieRenderer renderer = new PieRenderer(colors);
    	        renderer.setColor(plot, dataset);
    	        
    	        plot.setNoDataMessage("Nessun dato presente");
    
    	        plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})"));
    
    	        plot.setLegendLabelGenerator(new CustomLegendGenerator()); 
    
    	        plot.setStartAngle(290);
    
    	        // personalizza il titolo del grafico
    	        chart.getTitle().setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 15));
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    A parte che non setti da nessuna parte il dataset, che dai in pasto alla funzione crea grafico, ma a parte questo, non passi neanche i valori all'interno del dataset, cosa pensi che stamperà questo codice?? Nulla, tra l'altro i colori glieli devo passare direttamente dal Db, ma per semplificare le cose, io ho una lista da gestire, puoi aiutarmi??
    Emix!!

  4. #4
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    lo so anch'io che non ho messo la parte realtiva al dataset..
    ti ho passato solo la parte di codice che assegna dei colori.. mica tutto..
    ma con questa tel a cavi.. al primo elemento del dataset corrisponde il primo colore dell'array.. e così via.. dove sta il problema ?
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  5. #5
    Allora, potresti farmi la cortesia di passarmi tutto e di (sempre che puoi) passarmi la parte di codice che i colori se li prende da una lista?? Grazie in anticipo!!
    Emix!!

  6. #6
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    mhhh... va bene..
    dovrebbe esserci tutto quello che ti serve.. alcuni oggetti sono classi mie per il recupero della data, eseguire la query, etc, quelle le ho omesse.. tutto tutto è troppo codice non riesco..
    ma quello che ti serve c'è..

    nel mio esempio ad ogni "descrizione grossista" corrisponde un colore..
    se fai una query e la ordini per "descrizione grossista" avrai sempre lo stesso ordine..
    al primo elemento corrisponde il primo colore dell'array, e così via..

    codice:
     	public void creaGraficoDistributori(WebServer wb, CreaGraficoForm cgForm, HttpServletRequest request, String tipoServizio){
    
    		// PREPARO IL GRAFICO
    		String pathGrafico = System.currentTimeMillis() + ".png";
    		cgForm.addPathGrafico(pathGrafico);
    		DefaultPieDataset dataset = new DefaultPieDataset();
    		String titoloGrafico = "";
    
    		if(tipoServizio.equals("DIST_ORD")){
    			dataset = addDettaglioDistributori(wb, cgForm, request, "FCKOrdine");
    			titoloGrafico = CHART_TITLE_DIST_ORD;
    		}
    		if(tipoServizio.equals("DIST_DISP")){
    			dataset = addDettaglioDistributori(wb, cgForm, request, "FCKDisponibilita");
    			titoloGrafico = CHART_TITLE_DIST_DISP;
    		}
    		if(tipoServizio.equals("DIST_RDOC")){
    			dataset = addDettaglioDistributori(wb, cgForm, request, "FCKRichiestaDocumento");
    			titoloGrafico = CHART_TITLE_DIST_RDOC;
    		}
    		if(tipoServizio.equals("DIST_INFO")){
    			dataset = addDettaglioDistributori(wb, cgForm, request, "FCKInfoCom");
    			titoloGrafico = CHART_TITLE_DIST_INFO;
    		}
    		if(tipoServizio.equals("DIST_TOTAL")){
    			dataset = addDettaglioDistributori(wb, cgForm, request, "FCK");
    			titoloGrafico = CHART_TITLE_DIST_TOTAL;
    		}
    
    		
    		// calcolo del totale
    		int totale = 0;
    		for(int i=0;i<dataset.getItemCount();i++){
    			totale = totale + dataset.getValue(i).intValue();
    		}
    		String titolo = titoloGrafico + "                                                         (Somma Totale : " + totale + ")";
    		
    		// creo il grafico	
    		JFreeChart chart = ChartFactory.createPieChart3D(
    				titolo,  // chart title
    	            dataset,             // dataset
    	            true,                // include legend
    	            true,
    	            false
    	        );
    	        PiePlot plot = (PiePlot) chart.getPlot();
    	        
    	        // effetto trasparenza
    	        plot.setForegroundAlpha(0.8f);
    	        
    	        // colori personalizzati
    	        Color[] colors = {new Color(255,92,255), new Color(92,255,255), Color.orange, new Color(255,178,178), new Color(255,92,92), new Color(92,92,255), new Color(92,255,92), new Color(255,255,92), Color.lightGray};      
    	        PieRenderer renderer = new PieRenderer(colors);
    	        renderer.setColor(plot, dataset);
    	        
    	        plot.setNoDataMessage("Nessun dato presente");
    
    	        plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})"));
    
    	        plot.setLegendLabelGenerator(new CustomLegendGenerator()); 
    
    	        plot.setStartAngle(290);
    
    	        // personalizza il titolo del grafico
    	        chart.getTitle().setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 15));
    
    		// scrive il file
            try{
            	ChartUtilities.saveChartAsPNG(new File(GRAFICO_PATH_FILE + pathGrafico), chart, 1000, 470);
            } catch (IOException e) {
            	ActionErrors errori = new ActionErrors();
            	ActionError err = new ActionError("errors.statistiche.IOException");
            	errori.add("exception", err);
            	saveErrors(request,errori);
            }  
    	}
    	
    	
        public static class PieRenderer
        {
            private Color[] color;
           
            public PieRenderer(Color[] color)
            {
                this.color = color;
            }       
           
            public void setColor(PiePlot plot, DefaultPieDataset dataset)
            {
                List <Comparable> keys = dataset.getKeys();
                int aInt;
               
                for (int i = 0; i < keys.size(); i++)
                {
                    aInt = i % this.color.length;
                    plot.setSectionPaint(keys.get(i), this.color[aInt]);
                }
            }
            
            
            public void setColor(PiePlot plot, CategoryDataset dataset)
            {
                List <Comparable> keys = dataset.getRowKeys();
                int aInt;
               
                for (int i = 0; i < keys.size(); i++)
                {
                    aInt = i % this.color.length;
                    plot.setSectionPaint(keys.get(i), this.color[aInt]);
                }
            }
            
            
        }
        
        static class CustomLegendGenerator implements PieSectionLabelGenerator {
        /**
        * Set customized legend in the pie chart
        *
        * @param dataset PieChart DataSet
        * @param key Comparable Key
        * @return Result String to be displayed
        */
        public String generateSectionLabel(final PieDataset dataset, final Comparable key) {
        /* Creating a temporary string to hold value defined by us */
        String temp = null;
        String value = "";
        if (dataset != null) {
        	
        	value = String.valueOf(dataset.getValue(key.toString()).intValue());
        	
        /* Assigning the Value from dataset as a legend item for display */
        temp = key.toString() + " = " + value + "   ";
        }
        /* Returning the formatted string back to set the label */
        return temp;
        }
    
    	@Override
    	public AttributedString generateAttributedSectionLabel(PieDataset arg0,Comparable arg1) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
        }
    	
    	
        // FUNZIONE PER IL CARICAMENTO DEI DATI DISTRIBUTORI
    	public DefaultPieDataset addDettaglioDistributori(WebServer wb, CreaGraficoForm cgForm, HttpServletRequest request, String tipoServizio){
    
    		DefaultPieDataset dataset = new DefaultPieDataset();
    		DBInterface db = new DBInterface();
    		DateHelper dh = new DateHelper();
    		String dataDa = "";
    		String dataA = "";	
    		
    		try{
    			
    			// RECUPERO LE DATE DI RICERCA
    			if(cgForm.getPeriodo().equals("0")){
    				dataDa = dh.dateToDbf(cgForm.getDataDa());
    				dataA = dh.dateToDbf(cgForm.getDataA());
    			}else{
    				dataDa = dh.addDay(dh.dateNowToDbf(), - Integer.parseInt(cgForm.getPeriodo())+1);
    				dataA = dh.dateNowToDbf();
    			}
    
    			db.selectDistributore(wb, dataset, tipoServizio, dataDa, dataA);
    
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    		return dataset;
    		
    	}
    
    
    	public void selectDistributore(WebServer wb, DefaultPieDataset dataset, String tipoServizio, String dataDa, String dataA) throws Exception{
    
    		ParseXML parseXML = new ParseXML();
    		
    		// preparo connessione
    		prepareConnection(wb);
    		
    		// preparo query sql
    		String strSql = querySelectDistributore(tipoServizio, dataDa, dataA);
    		
    		String codiceGrossista = "";
    		String numeroRichieste = "";
    		TelnetAS as400;
    		String descGrossista = "";
    		
    		// esecuzione query
    		try{
    			
    			Vector v = sqlHelper.eseguiQuery(strSql);
    			int i=0;
    			
    			// ciclo per ogni riga trovata
    			while ( i<v.size() ) {
    				String [] record = (String[]) v.elementAt(i++);
    			
    				// recupero i campi
    				codiceGrossista = record[0].trim();
    				descGrossista = record[1].trim();
    				numeroRichieste = record[2].trim();
    				
    				if(!descGrossista.equals("")){
    					descGrossista = descGrossista + " ( " + codiceGrossista + " )";
    				}else{
    					descGrossista = codiceGrossista;
    				}
    				
    
    				// AGGIORNO IL DATASET
    				dataset.setValue(descGrossista, Integer.parseInt(numeroRichieste));
    
    			}
    
    		}catch(Exception e){
    			throw new Exception(e);
    		}finally{
    			sqlHelper.disconnetti();
    		}
    
    	}
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.