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

📄 uitj.java

📁 Eclipse RCP下编写的工作管理软件代码
💻 JAVA
字号:
package net.sf.pim.view;

import java.awt.Color;
import java.awt.Frame;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

import net.sf.pim.TjUtil;
import net.sf.pim.URLUtil;
import net.sf.util.ConfigHelper;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

/**
 * 统计主界面
 */
public class UiTj extends ApplicationWindow {
	// 原始数据
	private int[][] data;

	// 按项目组合计
	private int[] xmzTotal;

	// 按工作分类合计
	private int[] gzflTotal;
	
	//2006.09.22修订统计时,分类项为0,不统计0项时比例错的bug
	//建立正确的索引
	private HashMap<Integer,Integer> indexMap;

	public UiTj(Shell parentShell) {
		super(parentShell);
		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
		setBlockOnOpen(true);
	}

	protected void configureShell(Shell shell) {
		super.configureShell(shell);
		shell.setText("工作记录--时间统计");
		Image image = ImageDescriptor.createFromURL(
				URLUtil.getResourceURL("icons/tj.gif")).createImage(
				shell.getDisplay());
		shell.setImage(image);
		image.dispose();
	}

	protected Point getInitialSize() {
		return new Point(500, 360);
	}

	protected void handleShellCloseEvent() {
		close();
	}

	public Control createContents(Composite parent) {
		TabFolder tf = new TabFolder(parent, SWT.TOP);
		TabItem ti = new TabItem(tf, SWT.NULL);
		ti.setText("分类");
		Composite composite = new Composite(tf, SWT.NO_BACKGROUND
				| SWT.EMBEDDED);
		Frame frame = SWT_AWT.new_Frame(composite);
		frame.add(new ChartPanel(createBarChart()));
		ti.setControl(composite);
		
		TabItem ti1 = new TabItem(tf, SWT.NULL);
		ti1.setText("项目组");
		Composite composite1 = new Composite(tf, SWT.NO_BACKGROUND
				| SWT.EMBEDDED);
		Frame frame1 = SWT_AWT.new_Frame(composite1);
		frame1.add(new ChartPanel(createPieChart()));
		ti1.setControl(composite1);
		
		TabItem ti2 = new TabItem(tf, SWT.NULL);
		ti2.setText("数据");
		ti2.setControl(createTableViewer(tf).getControl());
		
		tf.setSelection(0);
		return tf;
	}

	// 自定义方法
	public void setTjdata(int[][] data) {
		this.data = data;
		xmzTotal = new int[data.length];
		gzflTotal = new int[data[0].length];
		for (int i = 0; i < data.length; i++) {
			for (int j = 0; j < data[i].length; j++) {
				xmzTotal[i] += data[i][j];
				gzflTotal[j] += data[i][j];
			}
		}

		//建立正确的索引
		indexMap=new HashMap<Integer, Integer>();
		makeIndex(indexMap,gzflTotal);
	}

	private static void makeIndex(HashMap<Integer,Integer> indexMap,int[] gzflTotal) {
		for(int i=0;i<gzflTotal.length;i++){
			indexMap.put(i, i);
		}
		if(!ConfigHelper.showTjZero()){
			indexMap.clear();
			int index = 0;
			for(int i=0;i<gzflTotal.length;i++){
				if(gzflTotal[i] != 0){ 
					indexMap.put(index, i);
					index ++;
				}
			}
		}
	}
	
	private TableViewer createTableViewer(Composite parent){
        TableViewer tv0 = new TableViewerWithCopy(parent, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI | SWT.V_SCROLL);
        String[] tjListGzfl = TjUtil.getTjListGzfl();
		//准备数据
        String[] header = new String[tjListGzfl.length+1];
        header[0]="";
        System.arraycopy(tjListGzfl, 0, header, 1, tjListGzfl.length);
        int[] headerSize = new int[header.length];
        Arrays.fill(headerSize, 40);

        Table table = tv0.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        for (int i = 0; i < header.length; i++) {
            TableColumn column = new TableColumn(table, SWT.NULL);
            column.setText(header[i]);
            column.setWidth(headerSize[i]);
        }
        ArrayList ss = TjUtil.int2string(data);
		tv0.setInput(ss);
        return tv0;
	}
	
	
	/***************************************************************************
	 * 以下是 一组和JFreeChart相关的方法
	 **************************************************************************/
	// 图片标题
	private String title = "";

	// BackgroundPaint
	private Color backgroundPaint;

	// 分类标题
	private transient String categoryName = "";

	// 值标题
	private transient String valueName = "分钟";

	// 封装器
	private DefaultCategoryDataset wrapCategoryDataSet() {
		DefaultCategoryDataset ds = new DefaultCategoryDataset();
		for (int k = 1; k < data.length; k++) {
			for (int i = 0; i < data[0].length; i++) {
				// 数据清0 2006.01.11 levin
				if (gzflTotal[i] == 0 && !ConfigHelper.showTjZero())
					continue;
				ds.addValue(data[k][i], TjUtil.getTjListXmz()[k], TjUtil
						.getTjListGzfl()[i]);
			}
		}
		return ds;
	}

	private PieDataset wrapPieDataSet() {
		DefaultPieDataset ds = new DefaultPieDataset();
		// i=1跳过"全部"
		for (int i = 1; i < data.length; i++) {
			// 数据清0 2006.01.11 levin
			if (xmzTotal[i] == 0 && !ConfigHelper.showTjZero())
				continue;
			ds.setValue(TjUtil.getTjListXmz()[i], xmzTotal[i]);
		}
		return ds;
	}

	// 独立拿出来以便将来可以对chart的风格进行自定义,如3D、颜色梯度等
	private JFreeChart createBarChart() {
		JFreeChart jfreechart = ChartFactory.createStackedBarChart3D(title,
				categoryName, valueName, wrapCategoryDataSet(),
				PlotOrientation.VERTICAL, true, true, false);
		CategoryPlot categoryplot = jfreechart.getCategoryPlot();
		categoryplot.setDomainGridlinesVisible(true);
		categoryplot.setForegroundAlpha(0.8f);
		NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
		numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
		numberaxis.setUpperMargin(0.15);
		CategoryAxis categoryaxis = categoryplot.getDomainAxis();
		categoryaxis.setCategoryLabelPositions(CategoryLabelPositions
				.createUpRotationLabelPositions(0.4));
		// 设置柱的底色和最大宽度
		BarRenderer3D barrenderer3d = (BarRenderer3D) categoryplot
				.getRenderer();
		barrenderer3d.setDrawBarOutline(false);
		barrenderer3d.setMaxBarWidth(0.04);
		barrenderer3d
				.setItemLabelGenerator(new StandardCategoryItemLabelGenerator() {
					private static final long serialVersionUID = 1L;

					@Override
					public String generateLabel(CategoryDataset dataset,
							int row, int column) {
						if (row == dataset.getRowCount() - 1) {
							String v = ""
									+ Math.round(1.0
											* data[0][indexMap.get(column)]
											/ xmzTotal[0] * 100) + "%";
							return v;
						} else
							return null;
					}
				});
		barrenderer3d.setItemLabelsVisible(true);
		ItemLabelPosition itemlabelposition = new ItemLabelPosition(/*ItemLabelAnchor.OUTSIDE12, TextAnchor.TOP_CENTER, TextAnchor.CENTER_RIGHT, -1.57D*/);
		barrenderer3d.setPositiveItemLabelPosition(itemlabelposition);
		return jfreechart;
	}

	private JFreeChart createPieChart() {
		JFreeChart chart = ChartFactory.createPieChart3D(title,
				wrapPieDataSet(), false, true, false);
		PiePlot plot = (PiePlot) chart.getPlot();
		plot.setBackgroundPaint(backgroundPaint);
		return chart;
	}
}

⌨️ 快捷键说明

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