📄 uitj.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 + -