【Java开源代码栏目提醒】:网学会员--在 Java开源代码编辑为广大网友搜集整理了:UI.java绩等信息,祝愿广大网友取得需要的信息,参考学习。
package ant;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import util.PosList;
import util.Position;
/**
程序界面及入口,
* 使用SWT
* @author Leaf
*/
public class UI extends Thread{
Environment environment;
AntCanvas canvas;
FileDialog openDialog;
FileDialog saveDialog;
CustomMapDialog mapDialog;
SettingsDialog settingsDialog;
boolean drawBest = true;
private static final int REDRAW_TIMER_INTERVAL = 20;
private PosList stat = new PosList();
private long startTime;
public UI() {
super("User Interface");
}
public void run() {
final Display display = new Display();
final Shell shell = new Shell(display, SWT.CLOSE | SWT.TITLE | SWT.MIN);
shell.setLayout(new RowLayout(SWT.HORIZONTAL));
shell.setText("ANTS");
Point buttonSize = new Point(80, 25);
// “打开”对话框
openDialog = new FileDialog(shell, SWT.OPEN);
openDialog.setFilterNames(new String[] {
"Map Files for ANTS (*.mapa)",
"All Files (*.*)"
});
openDialog.setFilterExtensions(new String[] {
"*.mapa", "*.*"
});
// “保存”对话框
saveDialog = new FileDialog(shell, SWT.SAVE);
saveDialog.setFilterNames(new String[] {
"Map Files for ANTS (*.mapa)"
});
saveDialog.setFilterExtensions(new String[] {"*.mapa"});
// “自定义地图”对话框
mapDialog = new CustomMapDialog(shell);
// “参数设置”对话框
settingsDialog = new SettingsDialog(shell);
// 图像容器
Composite leftComposite = new Composite(shell, SWT.NONE);
leftComposite.setLayoutData(new RowData(303, 318));
leftComposite.setLayout(new RowLayout(SWT.VERTICAL));
// 按钮容器
Composite rightComposite = new Composite(shell, SWT.NONE);
rightComposite.setLayoutData(new RowData(100, 318));
RowLayout layout = new RowLayout(SWT.VERTICAL);
layout.justify = true;
layout.marginTop = 0;
layout.marginBottom = 0;
rightComposite.setLayout(layout);
// 画布
canvas = new AntCanvas(leftComposite, SWT.NO_BACKGROUND);
canvas.setLayoutData(new RowData(Map.WIDTH, Map.HEIGHT));
canvas.addPaintListener(new PaintListener() {
// 在此执行所有绘图
工作 public void paintControl(PaintEvent e) {
// Create the image to fill the canvas
Image image = new Image(display, canvas.getBounds());
// Set up the offscreen gc
GC gcImage = new GC(image);
// 重绘信息素
Pheromone.drawTrail(gcImage);
if(drawBest) Pheromone.drawBest(gcImage);
// 重绘蚂蚁
for(int i = 0; i < Environment.antAmount; i++) {
environment.ants[i].draw(gcImage);
}
// 重绘地图
environment.getMap().draw(gcImage);
// 双缓冲绘制
e.gc.drawImage(image, 0, 0);
// clean up
image.dispose();
gcImage.dispose();
}
});
// 环境初始化——须在画布构建之后
Map map = new Map();
map.setStart(new Position(10, 10));
map.setDest(new Position(290, 290));
environment = new Environment(20, map, canvas);
// 进度条
final ProgressBar progress = new ProgressBar(leftComposite, SWT.HORIZONTAL | SWT.SMOOTH);
progress.setLayoutData(new RowData(300, 10));
progress.setMinimum(0);
progress.setMaximum(Environment.maxLoop);
// 地图按钮组
final Group antsGroup = new Group(rightComposite, SWT.SHADOW_IN);
antsGroup.setLayout(new RowLayout(SWT.VERTICAL));
antsGroup.setText("蚁群");
final Button start = new Button(antsGroup, SWT.PUSH);
final Button stop = new Button(antsGroup, SWT.PUSH);
final Button showBest = new Button(antsGroup, SWT.PUSH);
// 地图按钮组
final Group mapGroup = new Group(rightComposite, SWT.SHADOW_IN);
mapGroup.setLayout(new RowLayout(SWT.VERTICAL));
mapGroup.setText("地图");
final Button l