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

📄 resultpainter.java

📁 应付作业+练习OOP做的东西
💻 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 + -