2012-05-06 3 views

答えて

2

は、youreの棒グラフの話、と仮定すると...グラフのように見えるようにJPanelの中​​で四角形を描画し、

は、この例を見てください:また

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.FontMetrics; 
import java.awt.Graphics; 


import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class SimpleBarChart extends JPanel { 

    private double[] value; 
    private String[] languages; 
    private String title; 

    public SimpleBarChart(double[] val, String[] lang, String t) { 
     languages = lang; 
     value = val; 
     title = t; 
    } 

    @Override 
    public void paintComponent(Graphics graphics) { 
     super.paintComponent(graphics); 
     if (value == null || value.length == 0) { 
      return; 
     } 
     double minValue = 0; 
     double maxValue = 0; 
     for (int i = 0; i < value.length; i++) { 
      if (minValue > value[i]) { 
       minValue = value[i]; 
      } 
      if (maxValue < value[i]) { 
       maxValue = value[i]; 
      } 
     } 
     Dimension dim = getSize(); 
     int clientWidth = dim.width; 
     int clientHeight = dim.height; 
     int barWidth = clientWidth/value.length; 
     Font titleFont = new Font("Book Antiqua", Font.BOLD, 15); 
     FontMetrics titleFontMetrics = graphics.getFontMetrics(titleFont); 
     Font labelFont = new Font("Book Antiqua", Font.PLAIN, 10); 
     FontMetrics labelFontMetrics = graphics.getFontMetrics(labelFont); 
     int titleWidth = titleFontMetrics.stringWidth(title); 
     int q = titleFontMetrics.getAscent(); 
     int p = (clientWidth - titleWidth)/2; 
     graphics.setFont(titleFont); 
     graphics.drawString(title, p, q); 
     int top = titleFontMetrics.getHeight(); 
     int bottom = labelFontMetrics.getHeight(); 
     if (maxValue == minValue) { 
      return; 
     } 
     double scale = (clientHeight - top - bottom)/(maxValue - minValue); 
     q = clientHeight - labelFontMetrics.getDescent(); 
     graphics.setFont(labelFont); 
     for (int j = 0; j < value.length; j++) { 
      int valueP = j * barWidth + 1; 
      int valueQ = top; 
      int height = (int) (value[j] * scale); 
      if (value[j] >= 0) { 
       valueQ += (int) ((maxValue - value[j]) * scale); 
      } else { 
       valueQ += (int) (maxValue * scale); 
       height = -height; 
      } 
      graphics.setColor(Color.blue); 
      graphics.fillRect(valueP, valueQ, barWidth - 2, height); 
      graphics.setColor(Color.black); 
      graphics.drawRect(valueP, valueQ, barWidth - 2, height); 
      int labelWidth = labelFontMetrics.stringWidth(languages[j]); 
      p = j * barWidth + (barWidth - labelWidth)/2; 
      graphics.drawString(languages[j], p, q); 
     } 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setSize(350, 300); 
     double[] value = new double[5]; 
     String[] languages = new String[5]; 
     value[0] = 1; 
     languages[0] = "Visual Basic"; 

     value[1] = 2; 
     languages[1] = "PHP"; 

     value[2] = 3; 
     languages[2] = "C++"; 

     value[3] = 4; 
     languages[3] = "C"; 

     value[4] = 5; 
     languages[4] = "Java"; 
     frame.getContentPane().add(new SimpleBarChart(value, languages, 
       "Programming Languages")); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

を参照してください、外部ライブラリを使用しても構いません。

@trashGod経由で必要な例:exampleとそのsource code

関連する問題