📄 curveshow.java
字号:
package lifetest;import java.awt.event.*;import java.util.Vector;import java.awt.*;/** * Title: LifeSim * Description: * Copyright: Copyright (c) 2004 * Company: www.swarmagents.com * @author jake * @version 1.0 */public class CurveShow extends Frame implements Runnable{ Panel view = new Panel(); Thread runner1;//定义独立线程 Graphics gra;//在一个面板view上画图 int cycles=1000;//图中显示的横坐标数目 int cyclemax;//主程序中定义的历史数据最大长度 int originx=40;//画图区域原点的坐标 int originy=20; public int nAgentIndex=0; double MaxValues[]=new double[10]; lifesim local;//主程序的本地拷贝 Choice choicelen = new Choice(); Label label1 = new Label(); Label label2 = new Label(); Choice choiceItem1 = new Choice(); //Label label3 = new Label(); //Choice choiceItem2 = new Choice(); Label lblAgent = new Label(); Choice choiceAgent = new Choice();// Label label5 = new Label();// Label label6 = new Label(); public CurveShow(lifesim pd) { super("数据走向..."); local=pd; try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.setLayout(null); view.setBackground(Color.white); view.setBounds(new Rectangle(6, 26, 537, 316)); this.setBackground(Color.gray); this.addWindowListener(new java.awt.event.WindowAdapter() { public void windowOpened(WindowEvent e) { this_windowOpened(e); } public void windowClosing(WindowEvent e) { this_windowClosing(e); } }); choicelen.setBounds(new Rectangle(69, 355, 94, 21)); choicelen.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(ItemEvent e) { choicelen_itemStateChanged(e); } }); for(int i=0;i<40;i++){ choicelen.addItem(Integer.toString((i+1)*1000)); } choiceItem1.addItem("平均寿命"); //choiceItem2.addItem("能量"); choiceItem1.addItem("最大寿命"); //choiceItem2.addItem("股息"); choiceItem1.addItem("平均能量"); choiceItem1.addItem("最大能量"); choiceItem1.addItem("染色体平均长度"); choiceItem1.addItem("染色体最大长度"); choiceItem1.addItem("生命总数"); choiceItem1.addItem("总能量"); // choiceItem1.addItem("Lambda"); //choiceItem2.addItem("风险中性价格"); //choiceItem2.addItem("无"); choiceItem1.select(6); //choiceItem2.select(2); label1.setText("显示长度:"); label1.setBounds(new Rectangle(4, 360, 60, 12)); label2.setText("观察项目1:"); label2.setBounds(new Rectangle(171, 342, 70, 21)); choiceItem1.setBounds(new Rectangle(239, 345, 122, 18)); lblAgent.setText("选择智能体编号:"); lblAgent.setBounds(new Rectangle(435, 344, 107, 18)); choiceAgent.setBounds(new Rectangle(436, 363, 94, 17)); this.add(view, null); this.add(label2, null); this.add(choiceItem1, null); this.add(choicelen, null); this.add(label1, null); this.pack(); this.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(WindowEvent e) { this_windowClosing(e); } }); } void this_windowClosing(WindowEvent e) { this.hide(); this.dispose(); } void btnClose_actionPerformed(ActionEvent e) { this.hide(); this.dispose(); } void this_windowOpened(WindowEvent e) { gra=view.getGraphics(); cyclemax=WorldVariant.cyclemax; repaint(); if(runner1==null){ runner1=new Thread(this); runner1.start(); } } public void paint(Graphics g) { /**@todo: Override this java.awt.Component method*/ //画图函数 Vector history=new Vector(); double value1max=100; double value1min=0; double valuemax=100; double valuemin=0; boolean noneItem,isDrawn; String sName=""; history=local.localwd.History; int width=517-originx-25; int height=316-originy; //int step=localpd.steps; long step=local.localwd.modelTime; int nStart=0; int nEnd=cycles; int size=history.size(); if(step-cycles>0){ //计算需要绘制的历史数据数组中的启示索引 nStart=(int)step-cycles; } //清空画图区域 gra.clearRect(0,0,517,316); //设定原点坐标 int x=0,y=0,y0=height-originy; //对设定的要画的横坐标点数循环 noneItem=false; for(int i=0;i<cycles;i++){ //当前点坐标 isDrawn=true; int x1=(int)((i*width)/cycles); double value1=0; double value2=0; int maxIndex=cyclemax; if(cycles>maxIndex)maxIndex=cycles; if((i+nStart)%cycles<size){ WorldVariant wv=(WorldVariant)history.elementAt((i+nStart)%cyclemax); switch(choiceItem1.getSelectedIndex()){ case 0: value1=wv.avgAge[0]; if(i==0)sName="平均寿命"; value1max=5000; value1min=0; break; case 1: value1=wv.maxAge[0]; if(i==0)sName="最大寿命"; value1max=5000; value1min=0; break; case 2: if(i==0)sName="平均能量"; value1=wv.avgEnergy[0]; value1max=5000; value1min=0; break; case 3: if(i==0)sName="最大能量"; value1=wv.maxEnergy[0]; value1max=5000; value1min=0; break; case 4: if(i==0)sName="平均长度"; value1=wv.avgLen[0]; value1max=100; value1min=0; break; case 5: if(i==0)sName="最大长度"; value1=(int)(wv.maxLen[0]); value1max=100; value1min=0; break; case 6: if(i==0)sName="生命总数"; value1=wv.Num[0]; value1max=1000; value1min=0; break; case 7: if(i==0)sName="总能量"; value1=(int)(wv.TotalEnergy[0]); value1max=10000; value1min=0; break; case 8: if(i==0)sName="Lambda"; value1=wv.avgLambda[0]; value1max=1; value1min=0; } }else{ isDrawn=false; value1=valuemin; } valuemax=value1max; valuemin=value1min; if(value1>MaxValues[choiceItem1.getSelectedIndex()])MaxValues[choiceItem1.getSelectedIndex()]=value1; if(MaxValues[choiceItem1.getSelectedIndex()]>valuemax)valuemax=MaxValues[choiceItem1.getSelectedIndex()]; if(valuemax==valuemin)valuemin=valuemax-100; int y1=(int)(height*(value1-valuemin)/(valuemax-valuemin)); //绘制合作者比例 if(y1<=0){ y1=1; }else if(y1>=height){ y1=height; } if(isDrawn){ gra.setColor(Color.blue); gra.drawLine(x+originx,height-y,x1+originx,height-y1); } //前一点的坐标 x=x1; y=y1; } //画坐标轴及其说明文字 gra.setColor(Color.black); gra.drawLine(originx,height,width+originx,height); gra.drawLine(originx,height,originx,0); gra.drawString("时间",width+originx,height); gra.drawString(sName,originx-35,originy/2); this.setTitle(sName+"(曲线图)"); for(int i=0;i<10;i++){ int x3=(int)(i*width/10)+originx; int y3=height; gra.drawLine(x3,y3,x3,y3-2); String txt; if(step>cycles){ txt=Integer.toString((int)(step-cycles+i*cycles/10)); }else{ txt=Integer.toString((int)(i*cycles/10)); } gra.drawString(txt,x3,y3+12); } for(int i=0;i<=9;i++){ int x3=originx; int y3=(int)((10-i)*height/10); gra.drawLine(x3,y3,x3+2,y3); String txt=Double.toString(Math.ceil((double)(i*(valuemax-valuemin))/(double)10+valuemin)); gra.drawString(txt,x3-30,y3+5); } //gra.drawString("合作者",5,height-originy-15); //gra.drawString("背叛者",5,height-5); //gra.setColor(Color.blue); //gra.drawLine(2,height-originy-30,originx-5,height-originy-30); //gra.setColor(Color.red); //gra.drawLine(2,height-20,originx-5,height-20); super.paint(g); } void choicelen_itemStateChanged(ItemEvent e) { cycles=(choicelen.getSelectedIndex()+1)*1000; repaint(); } void btnRefresh_actionPerformed(ActionEvent e) { repaint(); } public void stop() { if (runner1!=null) { // running = false; runner1.stop(); runner1=null; } } public void run() { while(true){ repaint(); try{Thread.sleep(1000);}catch(InterruptedException e){}; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -