📄 tspmenu.java.svn-base
字号:
}
}
/**
* Add action listeners to menu
*/
protected void setMenuEnginesActionListeners() {
for(Component m: menuEngine.getMenuComponents()) {
((JMenuItem)m).addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
menuItemPDFReport.setEnabled(false);
menuItemXMLReport.setEnabled(false);
JMenuItem menu=((JMenuItem)e.getSource());
Class engineClass=(Class)menu.getClientProperty(menu.getText());
parent.engineClass=engineClass;
//JGap does not support populationGrow
//(or may be it does, but I do not use it)
if(engineClass.equals(JGapGreedyCrossoverEngine.class)) {
menuItemPopulationGrow.setVisible(false);
} else {
menuItemPopulationGrow.setVisible(true);
}
}
});
}
}
/**
* Add action listeners to menu
*/
protected void setMenuPriorityActionListeners() {
menuItemPriorityHighest.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
parent.configuration.setThreadPriority(10);
if(parent.runingThread!=null) {
parent.runingThread.setPriority(parent.configuration.getThreadPriority());
}
}});
menuItemPriorityHigh.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
parent.configuration.setThreadPriority(7);
if(parent.runingThread!=null) {
parent.runingThread.setPriority(parent.configuration.getThreadPriority());
}
}});
menuItemPriorityNormal.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
parent.configuration.setThreadPriority(5);
if(parent.runingThread!=null) {
parent.runingThread.setPriority(parent.configuration.getThreadPriority());
}
}});
menuItemPriorityLo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
parent.configuration.setThreadPriority(3);
if(parent.runingThread!=null) {
parent.runingThread.setPriority(parent.configuration.getThreadPriority());
}
}});
menuItemPriorityLowest.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
parent.configuration.setThreadPriority(1);
if(parent.runingThread!=null) {
parent.runingThread.setPriority(parent.configuration.getThreadPriority());
}
}});
}
/**
* Menu item action
* @param e
*/
protected void actionAntialiasing(ActionEvent e) {
JCheckBoxMenuItem menu=(JCheckBoxMenuItem)e.getSource();
if(menu.isSelected()) {
parent.configuration.setAntialiasing(true);
} else {
parent.configuration.setAntialiasing(false);
}
parent.gui.invalidate();
parent.gui.repaint();
}
/**
* Menu item action
* @param e
*/
protected void actionPause(@SuppressWarnings("unused") ActionEvent e) {
if(parent.pauseRequestFlag) {
//continue
parent.pauseRequestFlag=false;
menuItemPause.setText("Pause");
menuItemStart.setEnabled(true);
parent.runingThread.interrupt();
} else {
//pause
menuItemPause.setText("Resume");
parent.pauseRequestFlag=true;
menuItemStart.setEnabled(false);
}
}
/**
* Menu item action
* @param e
*/
protected void actionStart(@SuppressWarnings("unused") ActionEvent e) {
if(parent.startedFlag==false) {
//start
enableMenus(false);
parent.gui.statusBar.setText("Initializing..");
parent.startedFlag=true;
menuItemStart.setText("Stop");
menuItemPause.setEnabled(true);
menuItemPDFReport.setEnabled(false);
menuItemXMLReport.setEnabled(false);
menuItemXML2PDFReport.setEnabled(false);
//create computation thread
parent.runingThread=new Thread(
new Runnable() {
public void run() {
parent.run();
}
}
);
parent.runingThread.setPriority(parent.configuration.getThreadPriority());
parent.runingThread.start();
} else {
//stop
menuItemPDFReport.setEnabled(false);
menuItemXMLReport.setEnabled(false);
menuItemXML2PDFReport.setEnabled(false);
menuItemStart.setEnabled(false);
menuItemPause.setEnabled(false);
parent.stopRequestFlag=true;
}
}
/**
* Aligns text for menu items in Settings menu
* @param str
* @param value
* @return aligned text
*/
protected String alignText(String str, Object value) {
String str2=value.toString();
//align text label
while(str.length()<20) {
str+=" ";
}
//align number values
if(value instanceof Double) {
DecimalFormat f=new DecimalFormat("#################.################");
double d=((Double)value).doubleValue();
str2=f.format(d);
}
if(str2.indexOf('.')==-1) {
while(str2.length()<7) {
str2=" "+str2;
}
} else {
while(str2.indexOf('.')<7) {
str2=" "+str2;
}
}
return str+str2;
}
/**
* JMenu with support for antialiasing
*/
class JAntialiasedMenu extends JMenu {
/**
* serialVersionUID
*/
private static final long serialVersionUID =6749630508955245193L;
@Override
public void paint(Graphics g) {
if(parent.configuration.isAntialiasing()) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC );
}
super.paint(g);
}
}
/**
* JMenuItem with support for antialiasing
*/
class JAntialiasedMenuItem extends JMenuItem {
/**
* serialVersionUID
*/
private static final long serialVersionUID =7591332664361538950L;
@Override
public void paint(Graphics g) {
if(parent.configuration.isAntialiasing()) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC );
}
super.paint(g);
}
}
/**
* JMenuItem with support for antialiasing
*/
class JAntialiasedCheckBoxMenuItem extends JCheckBoxMenuItem {
/**
* serialVersionUID
*/
private static final long serialVersionUID =5452268115174827502L;
@Override
public void paint(Graphics g) {
if(parent.configuration.isAntialiasing()) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC );
}
super.paint(g);
}
}
/**
* JMenuItem with support for antialiasing
*/
class JAntialiasedRadioButtonMenuItem extends JRadioButtonMenuItem {
/**
* serialVersionUID
*/
private static final long serialVersionUID =3277282470785731582L;
@Override
public void paint(Graphics g) {
if(parent.configuration.isAntialiasing()) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC );
}
super.paint(g);
}
}
/**
* Input dialog for double value
* @param message
* @param doubleValue - default value for input
* @return input value or null
*/
protected Double doubleInputDialog(String message, double doubleValue) {
String value=(String) JOptionPane.showInputDialog(
parent.gui,
message,
"TSP Settings",
JOptionPane.QUESTION_MESSAGE,
null,
null,
new DecimalFormat("################.################").format(doubleValue)
);
if(value==null) return null;
try {
Double d=Double.parseDouble(value);
if(d>=0 && d<=1)
return d;
} catch(Throwable ex) {
//nop
}
JOptionPane.showMessageDialog(parent.gui,"Can not use this value.","Error",JOptionPane.WARNING_MESSAGE);
return null;
}
/**
* Input dialog for integer value
* @param message
* @param intValue
* @return input value or null
*/
protected Integer intInputDialog(String message, int intValue) {
String value=(String) JOptionPane.showInputDialog(
parent.gui,
message,
"TSP Settings",
JOptionPane.QUESTION_MESSAGE,
null,
null,
new DecimalFormat("################").format(intValue)
);
if(value==null) return null;
try {
Integer i=Integer.parseInt(value);
if(i>=10)
return i;
} catch(Throwable ex) {
//nop
}
JOptionPane.showMessageDialog(parent.gui,"Can not use this value.","Error",JOptionPane.WARNING_MESSAGE);
return null;
}
/**
* preview save dir for map export
*/
File mapsPrevDir=null;
/**
* Saves/export all available maps into .zip file.
* @param e
*/
protected void actionExportMaps(@SuppressWarnings("unused") ActionEvent e) {
JFileChooser fileChooser=new JFileChooser();
if(mapsPrevDir==null) {
mapsPrevDir=new File(".").getAbsoluteFile();
} else {
fileChooser.setCurrentDirectory(mapsPrevDir);
}
fileChooser.setSelectedFile(new File(mapsPrevDir,"tsp_maps.zip"));
fileChooser.setFileFilter(new FileFilter(){
@Override
public boolean accept(File f) {
if(f.isDirectory()) return true;
if(f.getAbsolutePath().toLowerCase().endsWith(".zip")) return true;
return false;
}
@Override
public String getDescription() {
return "*.zip";
}
});
if(fileChooser.showSaveDialog(parent.gui)==JFileChooser.APPROVE_OPTION) {
try {
mapsPrevDir=fileChooser.getCurrentDirectory();
File f=fileChooser.getSelectedFile();
String fileName=f.getName();
//set .zip extension
if(!fileName.toLowerCase().endsWith(".zip")) {
String ext="zip";
if(!fileName.endsWith(".")) {
ext="."+ext;
}
fileName+=ext;
File parentDir=f.getParentFile();
f=new File(parentDir,fileName);
}
if(f.exists()) {
if(JOptionPane.showConfirmDialog(parent.gui,"Should be existing file overwritten ?","Question",JOptionPane.YES_NO_OPTION)==JOptionPane.NO_OPTION) {
return;
}
}
//zip all maps
ZipOutputStream zip=new ZipOutputStream(new FileOutputStream(f));
zip.setLevel(9);
for(String mapName:TSP.mapFiles) {
if(mapName!=null) {
InputStream i=new Object().getClass().getResourceAsStream("/org/saiko/ai/genetics/tsp/etc/"+mapName+".csv");
if(i!=null) {
ZipEntry zipEntry=new ZipEntry(mapName+".csv");
zip.putNextEntry(zipEntry);
byte b[]=new byte[1024];
int size;
while((size=i.read(b))>0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -