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

📄 tablechart.java

📁 java swing 开发代码
💻 JAVA
字号:
// TableChart.java// A chart-generating class that uses the TableModel interface to get// its data.//package	jswing.ch16;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.table.*;public class TableChart extends JComponent implements TableModelListener {  protected TableModel model;  protected ChartPainter cp;  protected double[] percentages;  // pie slices  protected String[] labels;       // labels for slices  protected String[] tips;         // tooltips for slices  protected java.text.NumberFormat formatter =                 java.text.NumberFormat.getPercentInstance();  public TableChart(TableModel tm) {    setUI(cp = new PieChartPainter());    setModel(tm);  }  public void setTextFont(Font f) { cp.setTextFont(f); }  public Font getTextFont() { return cp.getTextFont(); }  public void setTextColor(Color c) { cp.setTextColor(c); }  public Color getTextColor() { return cp.getTextColor(); }  public void setColor(Color[] clist) { cp.setColor(clist); }  public Color[] getColor() { return cp.getColor(); }  public void setColor(int index, Color c) { cp.setColor(index, c); }  public Color getColor(int index) { return cp.getColor(index); }  public String getToolTipText(MouseEvent me) {    if (tips != null) {      int whichTip = cp.indexOfEntryAt(me);      if (whichTip != -1) {        return tips[whichTip];      }    }    return null;  }  public void tableChanged(TableModelEvent tme) {    // Rebuild the arrays only if the structure changed.    updateLocalValues(tme.getType() != TableModelEvent.UPDATE);  }  public void setModel(TableModel tm) {    // get listener code correct.    if (tm != model) {      if (model != null) {        model.removeTableModelListener(this);      }      model = tm;      model.addTableModelListener(this);      updateLocalValues(true);    }  }  public TableModel getModel() { return model; }  // Run through the model and count every cell (except the very first column,  // which we assume is the slice label column).  protected void calculatePercentages() {    double runningTotal = 0.0;    for (int i = model.getRowCount() - 1; i >= 0; i--) {      percentages[i] = 0.0;      for (int j = model.getColumnCount() - 1; j >=0; j--) {                // First try the cell as a Number object.        Object val = model.getValueAt(i,j);        if (val instanceof Number) {          percentages[i] += ((Number)val).doubleValue();        }        else if (val instanceof String) {           // oops, it wasn't numeric...          // Ok, so try it as a string          try {            percentages[i]+=Double.valueOf(val.toString()).doubleValue();          }           catch(Exception e) {            // not a numeric string...give up.          }         }      }      runningTotal += percentages[i];    }    // Make each entry a percentage of the total.    for (int i = model.getRowCount() - 1; i >= 0; i--) {      percentages[i] /= runningTotal;    }  }  // This method just takes the percentages and formats them for use as  // tooltips.  protected void createLabelsAndTips() {    for (int i = model.getRowCount() - 1; i >= 0; i--) {      labels[i] = (String)model.getValueAt(i, 0);      tips[i] = formatter.format(percentages[i]);    }  }  // Call this method to update the chart.  We try to be a bit efficient here  // in that we allocate new storage arrays only if the new table has a  // different number of rows.  protected void updateLocalValues(boolean freshStart) {    if (freshStart) {      int count = model.getRowCount();      if ((tips == null) || (count != tips.length)) {        percentages = new double[count];        labels = new String[count];        tips = new String[count];      }    }    calculatePercentages();    createLabelsAndTips();    // Now that everything's up-to-date, reset the chart painter with the new    // values.    cp.setValues(percentages);    cp.setLabels(labels);    // Finally, repaint the chart.    repaint();  }}

⌨️ 快捷键说明

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