📄 zoomview.java
字号:
package lifetest;
import java.awt.Frame;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
/**
* Title: LifeSim
* Description:
* Copyright: Copyright (c) 2004
* Company: www.swarmagents.com
* @author jake
* @version 1.0
*/
public class zoomView extends Frame implements Runnable{
//Choice agents;
Thread runner1;//定义独立线程
Choice lstChoice=new Choice();
Button btnOK = new Button("OK");
Button btnCancel=new Button("Cancel");
Button btnRefresh = new Button("Refresh");
TextArea des;
TextArea rules;
Choice lstAg=new Choice();
lifesim localapp;
Panel pan;
Panel controlPan;
Panel centralPan;
Point leftTopPoint;
Point rightBotPoint;
Point startPoint;
Point endPoint;
boolean doOrder=false;
int nSelAgent;
int Order[];
int selectType=0;
Vector agSelected=new Vector();
public zoomView(lifesim local,Point pt1,Point pt2) {
localapp=local;
startPoint=pt1;
endPoint=pt2;
leftTopPoint=new Point(pt1);
rightBotPoint=new Point(pt2);
if(pt1.x>pt2.x){
leftTopPoint.x=pt2.x;
rightBotPoint.x=pt1.x;
}
if(pt1.y>pt2.y){
leftTopPoint.y=pt2.y;
rightBotPoint.y=pt1.y;
}
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public zoomView() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
setLayout(new BorderLayout());
pan=new Panel();
pan.setLayout(new BorderLayout());
controlPan=new Panel();
centralPan=new Panel();
centralPan.setLayout(new BorderLayout());
des=new TextArea();
rules=new TextArea();
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(WindowEvent e) {
this_windowOpened(e);
}
public void windowClosing(WindowEvent e) {
this_windowClosing(e);
}
});
centralPan.add("North",lstAg);
centralPan.add("Center",rules);
pan.add("North",des);
pan.add("Center",centralPan);
lstChoice.addItem("Select action:");
lstChoice.addItem("Delete all selected");
lstChoice.addItem("Delete grasses and seeds");
lstChoice.addItem("Delete grasses");
lstChoice.addItem("Fill with grasses");
lstChoice.addItem("Gradiant grass");
lstChoice.addItem("Delete agents");
lstChoice.addItem("Copy agents");
lstChoice.addItem("Cut agents");
lstChoice.addItem("Paste agents");
pan.add("South",lstChoice);
this.add("Center",pan);
this.add("South",controlPan);
controlPan.add(btnOK);
controlPan.add(btnCancel);
String out="";
agSelected.removeAllElements();
int agCount=0;
int seedCount=0;
int grassCount=0;
for(int i=0;i<localapp.localwd.agents.size();i++){
agent ag1=(agent)localapp.localwd.agents.elementAt(i);
if(ag1.x>leftTopPoint.x&&ag1.x<rightBotPoint.x&&ag1.y>leftTopPoint.y&&ag1.y<rightBotPoint.y){
agCount++;
agSelected.addElement(ag1);
}
}
for(int i=leftTopPoint.x;i<rightBotPoint.x;i++){
for(int j=leftTopPoint.y;j<rightBotPoint.y;j++){
if(localapp.localwd.WorldState[i][j]==1){
grassCount++;
}else if(localapp.localwd.WorldState[i][j]==2){
seedCount++;
}
}
}
out="****************NOTES*******************\n";
out+="You have selected "+Integer.toString(agCount)+" agents\n";
out+="and "+Integer.toString(grassCount)+" grasses\n";
out+="and "+Integer.toString(seedCount)+" seeds";
des.setText(out);
doOrder=true;
//lstAg.select(0);
}
public void paint(Graphics g){
super.paint(g);
}
public boolean action(Event evt, Object o) {
if(evt.target==lstChoice){
selectType=lstChoice.getSelectedIndex()-1;
return true;
}else if(evt.target==btnOK){
if(selectType<=5&&selectType>=0){
if(selectType!=4){
localapp.localwd.DealWithSelected(leftTopPoint,rightBotPoint,agSelected,selectType,1);
}else{
localapp.localwd.DealWithSelected(startPoint,endPoint,agSelected,selectType,localapp.gValue);
}
}else{
switch(selectType){
case 6:
localapp.localwd.copyAgents(agSelected,leftTopPoint.x,leftTopPoint.y);
break;
case 7:
localapp.localwd.copyAgents(agSelected,leftTopPoint.x,leftTopPoint.y);
localapp.localwd.DeleteAgents(leftTopPoint,rightBotPoint,agSelected);
break;
case 8:
localapp.localwd.pasteAgents(leftTopPoint,rightBotPoint);
break;
}
}
localapp.enable(true);
//localapp.running=true;
localapp.canvas.repaint();
this.hide();
this.dispose();
return true;
}else if(evt.target==btnCancel){
localapp.enable(true);
//localapp.running=true;
localapp.canvas.repaint();
this.dispose();
}else if(evt.target==lstAg){
refreshRules();
return true;
}else if(evt.target==btnRefresh){
lstAg.select(nSelAgent);
repaint();
refreshRules();
return true;
}
return false;
}
private void refreshRules(){
nSelAgent=lstAg.getSelectedIndex()-1;
agent ag=(agent)localapp.localwd.agents.elementAt(Order[agSelected.size()-1-nSelAgent]);
String out="**************Rules of your selected agents*************\n";
for(int i=0;i<ag.rules.size();i++){
out+=ag.ReadRules(i,"");
out+="\n";
}
rules.setText(out);
}
void this_windowOpened(WindowEvent e) {
if(runner1==null){
runner1=new Thread(this);
runner1.start();
}
}
void this_windowClosing(WindowEvent e) {
localapp.enable(true);
//localapp.running=true;
localapp.canvas.repaint();
this.hide();
this.dispose();
}
public void stop() {
if (runner1!=null)
{
// running = false;
runner1.stop();
runner1=null;
}
}
public void run() {
while(true){
if(doOrder){
String out="";
lstAg.removeAll();
int count=agSelected.size();
out="selected agents' conditions: ";
lstAg.add(out);
Order=new int[count];
for(int i=0;i<count;i++){
Order[i]=i;
}
for(int i=count-1;i>=0;i--){
for(int j=0;j<i;j++){
agent ag1=(agent)localapp.localwd.agents.elementAt(Order[j]);
agent ag2=(agent)localapp.localwd.agents.elementAt(Order[j+1]);
if(ag1.age>ag2.age){
int t=Order[j+1];
Order[j+1]=Order[j];
Order[j]=t;
}
}
agent ag=(agent)localapp.localwd.agents.elementAt(Order[i]);
out="No."+Integer.toString(Order[i])+", Age:"+Integer.toString(ag.age)+", RulesNumber:"+Integer.toString(ag.rules.size())+", E:"+Integer.toString(ag.energy);
lstAg.add(out);
}
doOrder=false;
}
try{Thread.sleep(20);}catch(InterruptedException e){};
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -