İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

Java ile Basit Bir Pasta İstatistik (pie chart) Gösterimi

Seçim zamanlarında partilerin oy dağılımı bir pasta içinde verilir. Biz de bu örnekte bu pastayı ekrana çizeceğiz.

Programda değerler verilmekte. Örneğin üç eleman var. Elma: 1067, Armut: 345 ve Ayva: 789 oy almış olsun. Programımız aşağıdaki gibi bir çizim yapmaktadır.

Dikkat edilirse yüzde değerleri verilmiştir. 1067 oy toplam oy içinde yüzdesi 48'dir. Bu yüzden pastanın %48'lik kısmı kırmızı yapılmaktadır.

Üç class bulunmakta. PieChart class'ı asıl önemli class'tır.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import java.util.*;
  2 import java.awt.*;
  3 public class PieChart{
  4   Color[] colors=new Color[]{Color.red,Color.GREEN,Color.BLUE};
  5   String[] labels=new String[]{"A","B","C"};
  6   int[] data;
  7   int x,y,width,height;
  8   public PieChart(int x,int y,int width,int height){
  9     setX(x);
 10     setY(y);
 11     setWidth(width);
 12     setHeight(height);
 13   }
 14   public void setX(int x){
 15     this.x=x;
 16   }
 17   public void setY(int y){
 18     this.y=y;
 19   }
 20   public void setWidth(int width){
 21     this.width=width;
 22   }
 23   public void setHeight(int height){
 24     this.height=height;
 25   }
 26   public void setData(int[] data){
 27     this.data=data;
 28   }
 29   public void setLabels(String[] labels){
 30     this.labels=labels;
 31   }
 32   public void setColors(Color[] colors){
 33     this.colors=colors;
 34   }
 35   public void draw(Graphics g){
 36     int lastAngle=0;
 37     for(int i=0;i<data.length;i++){
 38       int angle=getAngle(i);
 39       Color c=colors[i];
 40       g.setColor(c);
 41       g.fillArc(x,y,width,height,lastAngle,angle);
 42       lastAngle+=angle;
 43     }
 44     drawLabelArae(g);
 45   }
 46   private void drawLabelArae(Graphics g){
 47     int labelX=x+width+20;
 48     int labelY=y+10;
 49     g.setColor(Color.black);
 50     for(int i=0;i<data.length;i++){
 51       int percentage=getPercentage(i);
 52       String label=labels[i];
 53       Color color=colors[i];
 54       g.setColor(color);
 55       g.drawString("%"+percentage,labelX,labelY);
 56       g.drawString(label,labelX+30,labelY);
 57       labelY+=20;
 58     }
 59   }
 60   private int getSum(){
 61     int sum=0;
 62     for(int i=0;i<data.length;i++){
 63       int intValue=data[i];
 64       sum+=intValue;
 65     }
 66     return sum;
 67   }
 68   private int getAngle(int index){
 69     int intValue=data[index];
 70     int sum=getSum();
 71     int result=(int)intValue*360/sum;
 72     return result;
 73   }
 74   private int getPercentage(int index){
 75     int intValue=data[index];
 76     int sum=getSum();
 77     int result=(int)intValue*100/sum;
 78     return result;
 79   }
 80 }

Bu class kurucusunda x ve y noktasını ve genişlik ve yüksekliği almaktadır. data dizisi girlen değerleri tutar. labels dizisi her elamanın etiketidir. colors ise her elemanı hangi renkte çizeceğimizi belirler. Çizime başlamadan önce bu değerler set edilir. Eğer colors ve labels set edilmesse varsayılan değerleri kullanılır.

Çizim için Graphics class'ının fillArc method'u kullanılır. Bu method bir daire ve istediğiniz açıda bir daire parçası(aynı zamanda elips) çizmek için kullanılır. Örneğin x=3,y=3 noktasına, 100 çapında bir daire

g.fillArc(3,3,100,100,0,360);

gibi çizlebilir. Son iki paramtre 0,360 açıdır. Eğer yarım daire çizmek istiyorsanız 0-180 vermelisiniz.

draw methodu tüm datayı bu method'u kullanarak çizer. Çizmesi için her datanın açı karşılığını bulmak gerekir. getAngle method bu işi yapar. Her data için label ve color nesnesi alınır. Bu değerlere göre daire parçası çizilir. drawLabelArae ise sağ bölmede yüzde değerlerini ve label değerlerini gösterir.

PieChartCanvas class'ı Canvas'ı extends etmiştir ve sadece çizimin yapıldığı yerdir.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import java.awt.*;
  2 import java.util.*;
  3 public class PieChartCanvas extends Canvas{
  4   PieChart pieChart;
  5   public PieChartCanvas(){
  6     setBackground(Color.WHITE);
  7   }
  8   public void setPieChart(PieChart pieChart){
  9     this.pieChart=pieChart;
 10   }
 11   public void paint(Graphics g){
 12     pieChart.draw(g);
 13   }
 14 }

PieChartApp ise program class'ıdır.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.swing.*;
  2 import java.awt.*;
  3 public class PieChartApp extends JFrame{
  4   public PieChartApp(){
  5     setBounds(10,10,300,300);
  6     PieChartCanvas canvas=new PieChartCanvas();
  7     PieChart pieChart=new PieChart(50,50,100,100);
  8     pieChart.setData(new int[]{347,345,789});
  9     pieChart.setLabels(new String[]{"elma","armut","ayva"});
 10     canvas.setPieChart(pieChart);
 11     getContentPane().setLayout(new BorderLayout());
 12     getContentPane().add(canvas,BorderLayout.CENTER);
 13   }
 14   public static void main(String[] args) {
 15     PieChartApp p=new PieChartApp();
 16     p.setVisible(true);
 17   }
 18 }

PieChartCanvas canvas=new PieChartCanvas();
PieChart pieChart=new PieChart(50,50,100,100);
pieChart.setData(new int[]{1067,345,789});
pieChart.setLabels(new String[]{"elma","armut","ayva"});
canvas.setPieChart(pieChart);

şeklinde canvas yaratılır. Bir PieChart yaratılır. Değerler verilir. Etiketler verilir. ve canvas'a PieChart verilir. Canvas çizilirken bu PieChart nesnesi çizilir.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır