📄 resultpainter.java
字号:
package userinterface;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import dataprocess.CoodMappingtable;
import dataprocess.Result;
public class ResultPainter extends JDialog {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private Result result; // @jve:decl-index=0:
private CoodMappingtable table;
private double xmin;
private double xmax;
private double step;
private double[] data;
/**
* @param owner
*/
public ResultPainter(Frame owner) {
super(owner);
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(1200, 750);
this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.setContentPane(getJContentPane());
this.setVisible(true);
this.addWindowStateListener(new WindowStateListener() {
public void windowStateChanged(WindowEvent arg0) {
repaint();
}
});
this.addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent arg0) {
repaint();
}
public void mouseMoved(MouseEvent arg0) {
repaint();
}
});
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.setBackground(Color.white);
}
return jContentPane;
}
public void paint(Graphics g) {
super.paint(g);
if (this.result == null)
return;
drawResult((Graphics2D) g);
}
public void drawDistribution(Result result) {
this.result = result;
this.repaint();
}
private void drawResult(Graphics2D g) {
// g.setColor(Color.red);
table = result.getMappingtable();
data = result.getData();
if (data.length == 0)
return;
xmax = xmin = table.coodXmapping(data[0]);
for (int i = 0; i < data.length; i++) {
double datax = table.coodXmapping(data[i]);
if (datax > xmax)
xmax = datax;
if (datax < xmin)
xmin = datax;
}
step = (xmax - xmin) / 10;
String title;
title = result.getStrategy().getStrategyName();
if (result.isSuitable()) {
title = "符合" + title;
String exp=result.getExpectation()+"";
if(exp.length()>=7) exp=exp.substring(0, 6);
String dev=result.getSquareDeviation()+"";
if(dev.length()>=7) dev=dev.substring(0, 6);
title+=" 期望:"+exp+" 方差:"+dev;
} else
title = "不符合" + title;
this.setTitle(title);
drawAxis(g);
drawDatapoints(g);
drawDistributionLine(g);
}
private void drawDistributionLine(Graphics2D g) {
//TODO Rewrite this function with general code
double expectation = result.getExpectation();
double deviation = Math.sqrt(result.getExpectation());
double p1x, p1y, p2x, p2y;
p1x = expectation - deviation;
p2x = expectation + deviation;
p1y = 0.159;
p2y = 0.841;
p1x = this.transformX(p1x);
p2x = this.transformX(p2x);
p1y = this.transformY(p1y);
p2y = this.transformY(p2y);
g.setColor(Color.GREEN);
g.drawLine((int) p1x, (int) p1y, (int) p2x, (int) p2y);
}
private void drawDatapoints(Graphics2D g) {
for (int i = 0; i < 11; i++) {
String xstring=xmin+i*step+"";
if(xstring.length()>=7)
xstring=xstring.substring(0, 6);
g.drawString(xstring, 120 + i * 100, 725);
}
for (int i = 0; i < data.length; i++) {
double accy;
if (data.length > 20)
accy = (i + 1.0) / data.length;
/**
* 使用中位秩
*/
else
accy = (i + 0.7) / (data.length + 0.4);
double CoodX, CoodY;
CoodX=this.transformX(data[i]);
CoodY = this.transformY(accy);
drawPoint(g, (int) CoodX, (int) CoodY);
}
}
private void drawPoint(Graphics2D g, int x, int y) {
g.fillOval(x - 5, y - 5, 10, 10);
}
private double transformX(double x) {
double temp = table.coodXmapping(x);
temp = (x - xmin) / step;
temp = temp * 100 + 125;
return temp;
}
private double transformY(double y) {
double temp = table.coodYmapping(y);
temp = 375 - temp * 100;
return temp;
}
private void drawAxis(Graphics2D g) {
g.setColor(Color.BLUE);
g.drawLine(100, 50, 100, 700);
g.drawLine(100, 375, 1150, 375);
int[] YArrowX = { 100, 90, 100, 110 };
int[] YArrowY = { 50, 75, 60, 75 };
g.fillPolygon(YArrowX, YArrowY, 4);
int[] XArrowX = { 1150, 1125, 1140, 1125 };
int[] XArrowY = { 375, 365, 375, 385 };
g.fillPolygon(XArrowX, XArrowY, 4);
// 绘制Y轴坐标、网格
g.setColor(Color.DARK_GRAY);
double[] YNum = { 0.999, 0.99, 0.95, 0.90, 0.80, 0.70, 0.60, 0.50,
0.40, 0.30, 0.20, 0.1, 0.05, 0.01, 0.001 };
double ycood = 0;
for (int i = 0; i < YNum.length; i++) {
ycood = this.transformY(YNum[i]);
g.drawLine(100, (int) ycood, 1125, (int) ycood);
g.drawString(YNum[i] * 100 + " %", 25, (int) (ycood + 5));
}
g.drawString("F(t)", 75, 50);
for (int i = 0; i < 11; i++) {
g.drawLine((int)this.transformX(i), 75, (int)this.transformX(i), 675);
}
}
// @jve:decl-index=0:
} // @jve:decl-index=0:visual-constraint="-45,-14"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -