Simple bar chart

Kết quả là:

Simple bar chart

 kket

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.FontMetrics;

import java.awt.Graphics;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class ChartPanel extends JPanel {

  private double[] values;

  private String[] names;

  private String title;

  public ChartPanel(double[] v, String[] n, String t) {

    names = n;

    values = v;

    title = t;

  }

  public void paintComponent(Graphics g) {

    super.paintComponent(g);

    if (values == null || values.length == 0)

      return;

    double minValue = 0;

    double maxValue = 0;

    for (int i = 0; i < values.length; i++) {

      if (minValue > values[i])

        minValue = values[i];

      if (maxValue < values[i])

        maxValue = values[i];

    }

    Dimension d = getSize();

    int clientWidth = d.width;

    int clientHeight = d.height;

    int barWidth = clientWidth / values.length;

    Font titleFont = new Font(“SansSerif”, Font.BOLD, 20);

    FontMetrics titleFontMetrics = g.getFontMetrics(titleFont);

    Font labelFont = new Font(“SansSerif”, Font.PLAIN, 10);

    FontMetrics labelFontMetrics = g.getFontMetrics(labelFont);

    int titleWidth = titleFontMetrics.stringWidth(title);

    int y = titleFontMetrics.getAscent();

    int x = (clientWidth – titleWidth2;

    g.setFont(titleFont);

    g.drawString(title, x, y);

    int top = titleFontMetrics.getHeight();

    int bottom = labelFontMetrics.getHeight();

    if (maxValue == minValue)

      return;

    double scale = (clientHeight – top – bottom(maxValue – minValue);

    y = clientHeight – labelFontMetrics.getDescent();

    g.setFont(labelFont);

    for (int i = 0; i < values.length; i++) {

      int valueX = i * barWidth + 1;

      int valueY = top;

      int height = (int) (values[i* scale);

      if (values[i>= 0)

        valueY += (int) ((maxValue – values[i]) * scale);

      else {

        valueY += (int) (maxValue * scale);

        height = -height;

      }

      g.setColor(Color.red);

      g.fillRect(valueX, valueY, barWidth – 2, height);

      g.setColor(Color.black);

      g.drawRect(valueX, valueY, barWidth – 2, height);

      int labelWidth = labelFontMetrics.stringWidth(names[i]);

      x = i * barWidth + (barWidth – labelWidth2;

      g.drawString(names[i], x, y);

    }

  }

  public static void main(String[] argv) {

    JFrame f = new JFrame();

    f.setSize(400300);

    double[] values = new double[3];

    String[] names = new String[3];

    values[01;

    names[0“Item 1”;

    values[12;

    names[1“Item 2”;

    values[24;

    names[2“Item 3”;

    f.getContentPane().add(new ChartPanel(values, names, “title”));

    WindowListener wndCloser = new WindowAdapter() {

      public void windowClosing(WindowEvent e) {

        System.exit(0);

      }

    };

    f.addWindowListener(wndCloser);

    f.setVisible(true);

  }

}

           

         

  

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s