📄 gaaparams.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.io.*;
import java.util.*;
import java.net.*;
import com.magelang.tabsplitter.*;
import com.magelang.splitter.*;
import com.scs.awt.*;
import com.scs.util.*;
public class GaaParams extends Panel
implements ActionListener, MouseListener, ItemListener, com.scs.awt.CellListener {
private Panel statusPanel;
private Label statusLabel;
private TabNamePanel intPanel;
private TabNamePanel reaPanel;
private TabNamePanel strPanel;
private TabNamePanel alleleDefPanel;
private TabNamePanel alleleMapPanel;
private TabNamePanel optPanel;
private TabNamePanel strategyPanel;
public static TabNamePanel udfPanel;
public static TabSplitter tab = null;
ScsGrid defGrid;
ScsGrid mapGrid;
Button buttons[][];
Button defButtons[];
Button mapButtons[];
Button udfButtons[];
Button strategyButtons[];
TextField textDefNumAlleles;
TextArea txtExpression;
TextField txtMin;
TextField txtMax;
TextField txtNumGenes;
TextField txtNumVariables;
TextField txtExitValue;
Checkbox chkMin;
Checkbox chkMax;
TextField txtString1;
TextField txtString2;
TextField txtString3;
TextField txtString4;
TextField txtString5;
Choice chcChoice1;
Choice chcChoice2;
Choice chcChoice3;
Label labels[][];
Choice choices[][];
TextField texts[][];
Checkbox checks[][];
int numbers[][];
String tips[][];
String helps[][];
int groupCount[];
DecimalFormat dFormat;
GaaProblem problem;
GaaPopulation pop;
GaaFileInput fileData;
String strategies[] = {
"All-C (Always Cooperate)",
"All-D (Always Defect)",
"TFT (Tit for Tat)",
"TTFT (Two Tats for Tit)",
"TFTT (Tit for Two Tats)"
};
String strategyStrings[] = {
"BBBBBBBBBBBBBBBBBBBBB",
"AAAAAAAAAAAAAAAAAAAAA",
"ABABABABABABABABABABB",
"AAAAABABAAAAABABABABB",
"ABABBBBBABABBBBBBBBBB"
};
final int GROUPNUM = 7;
final int FIELDNUM = 18;
final int MAXROWS = 9;
public GaaParams(GaaProblem pr, GaaPopulation pl) {
super();
problem = pr;
pop = pl;
fileData = problem.fileData;
dFormat = new DecimalFormat("0.###");
setLayout(new BorderLayout());
setSize(730, 390);
setBackground(Color.lightGray);
makePanels();
makeStatusPanel();
initControls();
initParameters(true);
makeDefPanel();
makeMapPanel();
makeUdfPanel();
makeStrategyPanel();
initUdfPanel();
//add("North", new Label());
add("Center", tab);
add("South", statusLabel);
}
private void initControls() {
int i, j;
groupCount = new int[GROUPNUM];
labels = new Label[GROUPNUM][FIELDNUM];
texts = new TextField[GROUPNUM][FIELDNUM];
choices = new Choice[GROUPNUM][FIELDNUM];
checks = new Checkbox[GROUPNUM][FIELDNUM];
numbers = new int[GROUPNUM][FIELDNUM];
tips = new String[GROUPNUM][FIELDNUM];
helps = new String[GROUPNUM][FIELDNUM];
buttons = new Button[GROUPNUM][5];
Font f1 = new Font("TimesRoman",Font.BOLD,14);
Font f2 = new Font("TimesRoman",Font.PLAIN,14);
for (i=0;i<GROUPNUM;i++) {
groupCount[i] = 0;
for (j=0;j<FIELDNUM;j++) {
labels[i][j] = new Label("");
choices[i][j] = new Choice();
texts[i][j] = new TextField("");
checks[i][j] = new Checkbox();
tips[i][j] = "";
helps[i][j] = "";
labels[i][j].setFont(f1);
texts[i][j].setFont(f2);
choices[i][j].setFont(f2);
checks[i][j].setFont(f2);
labels[i][j].addMouseListener( this );
texts[i][j].addMouseListener( this );
choices[i][j].addMouseListener( this );
checks[i][j].addMouseListener( this );
numbers[i][j] = 0;
}
}
}
void loadParams() {
int ret;
FileWriter fw;
String dir;
String fil;
int i;
String txt = "";
URL url;
int recordNumber;
int ni = 0, nr = 0, ns = 0, nf=0;
FileInput fileData;
String dataFields[][];
int dataTypes[];
if (GaaApplet.gaaAppMode.equals("Applet"))
ret = MsgDialog.msg("Sorry", "This option is not supported in an applet", MsgDialog.MB_OK, 0);
else {
dir = System.getProperty("user.dir");
Frame f = new Frame("Load Parameters");
final FileDialog fd = new FileDialog(f,"Load parameters from file",FileDialog.LOAD);
fd.setDirectory(dir);
fd.setFile("*.par");
fd.show();
fil = fd.getFile();
if (fil == null) {
return;
}
try {
url = new URL("file:////" + dir + File.separator);
}
catch (Exception e) {
return;
}
try
{
URL fileUrl = new URL(url,fil);
fileData = new FileInput(fileUrl,"=");
if (!fileData.success) {
GaaAction.deb.debug("fileData error");
return;
}
}
catch(MalformedURLException e){
GaaAction.deb.debug("fileData error : " + e.toString());
return;
}
catch (Exception e){
GaaAction.deb.debug("fileData error : " + e.toString());
return;
}
recordNumber = fileData.recordNumber;
dataFields = fileData.dataFields;
dataTypes = fileData.dataTypes;
for (i=0;i<recordNumber;i++) {
if (!(dataFields[i][0].charAt(0) == '[')) {
String s = dataFields[i][1];
if (dataTypes[i] == 0) {
texts[0][ni].setText(" "+dataFields[i][1]);
ni++;
}
else
if (dataTypes[i] == 1) {
texts[1][nr].setText(" "+dFormat.format(Double.valueOf(dataFields[i][1])));
nr++;
}
else
if (dataTypes[i] == 2) {
texts[2][ns].setText(" "+dataFields[i][1]);
ns++;
}
else
if (dataTypes[i] == 3) {
checks[3][nf].setState(GaaMisc.stringToBoolean(dataFields[i][1]));
nf++;
}
}
}
}
}
public void initParameters(boolean create) {
String dataFields[][];
int dataTypes[];
String dataTips[];
String dataHelps[];
int recordNumber;
int ni = 0, nr = 0, ns = 0, nf=0;
int i;
fileData = problem.fileData;
recordNumber = fileData.recordNumber;
dataFields = fileData.dataFields;
dataTypes = fileData.dataTypes;
dataTips = fileData.dataTips;
dataHelps = fileData.dataHelps;
for (i=0;i<recordNumber;i++) {
if (!(dataFields[i][0].charAt(0) == '[')) {
String s = dataFields[i][1];
String s0 = dataFields[i][0];
int s1 = dataTypes[i];
if (dataTypes[i] == 0) {
labels[0][ni].setText(dataFields[i][0]);
texts[0][ni].setText(" "+dataFields[i][1]);
tips[0][ni] = dataTips[i];
helps[0][ni] = dataHelps[i];
numbers[0][ni] = i;
ni++;
}
else
if (dataTypes[i] == 1) {
labels[1][nr].setText(dataFields[i][0]);
//texts[1][nr].setText(" "+dataFields[i][1]);
texts[1][nr].setText(" "+dFormat.format(Double.valueOf(dataFields[i][1])));
tips[1][nr] = dataTips[i];
helps[1][nr] = dataHelps[i];
numbers[1][nr] = i;
nr++;
}
else
if (dataTypes[i] == 2) {
labels[2][ns].setText(dataFields[i][0]);
texts[2][ns].setText(" "+dataFields[i][1]);
tips[2][ns] = dataTips[i];
helps[2][ns] = dataHelps[i];
numbers[2][ns] = i;
ns++;
}
else
if (dataTypes[i] == 3) {
labels[3][nf].setText(dataFields[i][0]);
checks[3][nf].setState(GaaMisc.stringToBoolean(dataFields[i][1]));
tips[3][nf] = dataTips[i];
helps[3][nf] = dataHelps[i];
numbers[3][nf] = i;
nf++;
}
}
}
if (create) {
groupCount[0] = ni;
groupCount[1] = nr;
groupCount[2] = ns;
groupCount[3] = nf;
initInputPanel(0, intPanel, labels[0], texts[0], ni, "Integer Parameters");
initInputPanel(1, reaPanel, labels[1], texts[1], nr, "Real Parameters");
initInputPanel(2, strPanel, labels[2], texts[2], ns, "String Parameters");
initInputPanel(3, optPanel, labels[3], checks[3], nf, "Boolean Parameters (Flags)");
}
}
public void updateParameters(int group) {
int i, j, k;
fileData = problem.fileData;
if (group == 0) {
for (i=0;i<GROUPNUM;i++) {
for (j=0;j<groupCount[i];j++) {
k = numbers[i][j];
if (i == 3) {
if (checks[i][j].getState())
fileData.dataFields[k][1] = "True";
else
fileData.dataFields[k][1] = "False";
}
else
fileData.dataFields[k][1] = texts[i][j].getText().trim();
}
}
}
else {
for (j=0;j<groupCount[group];j++) {
k = numbers[group][j];
fileData.dataFields[k][1] = texts[group][j].getText().trim();;
}
}
String t1 = fileData.dataFields[3][0];
String t2 = fileData.dataFields[3][1];
problem.dataFieldsToParams();
pop.updateParams();
}
void saveParams() {
int ret;
FileWriter fw;
String dir;
String fil;
int i,j,k;
String txt = "";
Date date;
String dateString;
if (GaaApplet.gaaAppMode.equals("Applet"))
ret = MsgDialog.msg("Sorry", "This option is not supported in an applet", MsgDialog.MB_OK, 0);
else {
date = new Date();
dateString = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG).format(date);
dir = System.getProperty("user.dir");
Frame f = new Frame("Save Parameters");
final FileDialog fd = new FileDialog(f,"Save parameters to file",FileDialog.SAVE);
fd.setDirectory(dir);
fd.setFile("*.par");
fd.show();
fil = fd.getFile();
if (fil == null) {
return;
}
fil = dir + File.separator + fil;
try {
fw = new FileWriter(fil);
} catch(IOException e) {
return;
}
PrintWriter prw = new PrintWriter(fw, false);
try {
txt = "[File: " + fil + "]";
prw.write(txt);
prw.println();
txt = "[" + problem.problemTitle + " parameters saved at: " + dateString + "]";
prw.write(txt);
prw.println();
prw.println();
fileData = problem.fileData;
for (i=0;i<4;i++) {
switch (i) {
case 0:
txt = "[Integers]";
break;
case 1:
txt = "[Reals]";
break;
case 2:
txt = "[Strings]";
break;
case 3:
txt = "[Flags]";
break;
}
prw.println();
prw.write(txt);
prw.println();
for (j=0;j<groupCount[i];j++) {
k = numbers[i][j];
if (i == 3) {
if (checks[i][j].getState())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -