⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chart.java

📁 Java2核心技术卷一 配套源码,看了还不错
💻 JAVA
字号:
/**
 * @version 1.20 27 Jun 1998
 * @author Cay Horstmann
 */

import java.awt.*;
import javax.swing.*;

class ChartPanel extends JPanel
{  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;
      int i;
      double minValue = 0;
      double maxValue = 0;
      for (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 - titleWidth) / 2;
      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 (i = 0; i < values.length; i++)
      {  int x1 = i * barWidth + 1;
         int y1 = top;
         int height = (int)(values[i] * scale);
         if (values[i] >= 0)
            y1 += (int)((maxValue - values[i]) * scale);
         else
         {  y1 += (int)(maxValue * scale);
            height = -height;
         }
         
         g.setColor(Color.red);
         g.fillRect(x1, y1, barWidth - 2, height);         
         g.setColor(Color.black);
         g.drawRect(x1, y1, barWidth - 2, height);
         int labelWidth 
            = labelFontMetrics.stringWidth(names[i]);
         x = i * barWidth + (barWidth - labelWidth) / 2;
         g.drawString(names[i], x, y);
      }
   }

   private double[] values;
   private String[] names;
   private String title;
}

public class Chart extends JApplet 
{  public void init() 
   {  String v = getParameter("values");
      if (v == null) return;
      int n = Integer.parseInt(v);
      double[] values = new double[n];
      String[] names = new String[n];
      int i;
      for (i = 0; i < n; i++)
      {  values[i] = Double.parseDouble
            (getParameter("value_" + (i + 1)));
         names[i] = getParameter("name_" + (i + 1));
      }
      
      Container contentPane = getContentPane();
      contentPane.add(new ChartPanel(values, names, 
         getParameter("title")));
   }      
}   


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -