📄 tspmenu.java.svn-base
字号:
/*
* $Source: f:/cvs/prgm/tsp/src/org/saiko/ai/genetics/tsp/TSPMenu.java,v $
* $Id: TSPMenu.java,v 1.9 2005/08/23 23:18:05 dsaiko Exp $
* $Date: 2005/08/23 23:18:05 $
* $Revision: 1.9 $
* $Author: dsaiko $
*
* Traveling Salesman Problem genetic algorithm.
* This source is released under GNU public licence agreement.
* dusan@saiko.cz
* http://www.saiko.cz/ai/tsp/
*
* Change log:
* $Log: TSPMenu.java,v $
* Revision 1.9 2005/08/23 23:18:05 dsaiko
* Finished.
*
* Revision 1.8 2005/08/23 12:45:50 dsaiko
* console file replacement dialog was shown
*
* Revision 1.7 2005/08/23 10:17:43 dsaiko
* Gui and main program divided
*
* Revision 1.6 2005/08/23 10:01:31 dsaiko
* Gui and main program divided
*
* Revision 1.5 2005/08/22 22:08:51 dsaiko
* Created engines with heuristics
*
* Revision 1.4 2005/08/13 15:44:26 dsaiko
* build task finished
*
* Revision 1.3 2005/08/13 14:41:35 dsaiko
* *** empty log message ***
*
* Revision 1.2 2005/08/13 12:53:02 dsaiko
* XML2PDF report finished
*
* Revision 1.1 2005/08/12 23:52:17 dsaiko
* Initial revision created
*
*/
package org.saiko.ai.genetics.tsp;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.filechooser.FileFilter;
import javax.xml.parsers.DocumentBuilderFactory;
import org.saiko.ai.genetics.tsp.engines.jgapCrossover.JGapGreedyCrossoverEngine;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
/**
* @author Dusan Saiko (dusan@saiko.cz)
* Last change $Date: 2005/08/23 23:18:05 $
*
* GUI menu definition and actions for TSP
*/
public class TSPMenu {
/** String containing the CVS revision. **/
public final static String CVS_REVISION = "$Revision: 1.9 $";
/**
* Parent TSP Gui instance
*/
TSP parent;
/**
* Class constructor
* @param parent - parent TSP application
*/
protected TSPMenu(TSP parent) {
this.parent=parent;
}
/** menu PROGRAM **/
protected final JMenu menuProgram=new JAntialiasedMenu();
/** menu item **/
protected final JMenuItem menuItemStart=new JAntialiasedMenuItem();
/** menu item **/
protected final JMenuItem menuItemPause=new JAntialiasedMenuItem();
/** menu item **/
protected final JMenuItem menuItemPDFReport=new JAntialiasedMenuItem();
/** menu item **/
protected final JMenuItem menuItemXMLReport=new JAntialiasedMenuItem();
/** menu item **/
protected final JMenuItem menuItemXML2PDFReport=new JAntialiasedMenuItem();
/** menu item **/
protected final JMenuItem menuItemExit=new JAntialiasedMenuItem();
/** menu MAPS **/
protected final JMenu menuMaps=new JAntialiasedMenu();
/** menu item **/
protected final JMenuItem menuItemExportMaps=new JAntialiasedMenuItem();
/** menu ENGINE **/
protected final JMenu menuEngine=new JAntialiasedMenu();
/** menu SETTINGS **/
protected final JMenu menuSettings=new JAntialiasedMenu();
/** menu item **/
protected final JMenuItem menuItemPopulationSize=new JAntialiasedMenuItem();
/** menu item **/
protected final JMenuItem menuItemPopulationGrow=new JAntialiasedMenuItem();
/** menu item **/
protected final JMenuItem menuItemMutationRatio=new JAntialiasedMenuItem();
/** menu item **/
protected final JMenuItem menuItemMaxBestAge=new JAntialiasedMenuItem();
/** menu item **/
protected final JCheckBoxMenuItem menuItemRMS=new JAntialiasedCheckBoxMenuItem();
/** menu GRAPHICS **/
protected final JMenu menuGraphics=new JAntialiasedMenu();
/** menu item **/
protected final JCheckBoxMenuItem menuItemAntialiasing=new JAntialiasedCheckBoxMenuItem();
/** menu HELP **/
protected final JMenu menuHelp=new JAntialiasedMenu();
/** menu item **/
protected final JMenuItem menuItemAbout=new JAntialiasedMenuItem();
/** menu PRIORITY **/
protected final JMenu menuPriority=new JAntialiasedMenu();
/** menu item **/
protected final JRadioButtonMenuItem menuItemPriorityHighest=new JAntialiasedRadioButtonMenuItem();
/** menu item **/
protected final JRadioButtonMenuItem menuItemPriorityHigh=new JAntialiasedRadioButtonMenuItem();
/** menu item **/
protected final JRadioButtonMenuItem menuItemPriorityNormal=new JAntialiasedRadioButtonMenuItem();
/** menu item **/
protected final JRadioButtonMenuItem menuItemPriorityLo=new JAntialiasedRadioButtonMenuItem();
/** menu item **/
protected final JRadioButtonMenuItem menuItemPriorityLowest=new JAntialiasedRadioButtonMenuItem();
/**
* Create menu for the application
* @return this menu instance
*/
public TSPMenu createMenuBar() {
JMenuBar menuBar;
menuBar=new JMenuBar();
//set the labels
resetMenu();
Font menuFont=new Font("courier",Font.BOLD,menuEngine.getFont().getSize());
//set all menu items
menuBar.add(menuProgram);
{
menuProgram.add(menuItemStart);
menuProgram.add(menuItemPause);
menuProgram.addSeparator();
menuProgram.add(menuItemPDFReport);
menuProgram.add(menuItemXMLReport);
menuProgram.add(menuItemXML2PDFReport);
menuProgram.addSeparator();
menuProgram.add(menuItemExit);
menuItemPDFReport.setEnabled(false);
menuItemXMLReport.setEnabled(false);
setMenuProgramActionListeners();
}
menuBar.add(menuMaps);
{
addMenuMapsItems();
setMenuMapsActionListeners();
menuMaps.addSeparator();
menuMaps.add(menuItemExportMaps);
}
menuBar.add(menuEngine);
{
addMenuEnginesItems();
setMenuEnginesActionListeners();
}
menuBar.add(menuSettings);
{
menuSettings.add(menuItemPopulationSize);
menuSettings.add(menuItemPopulationGrow);
menuSettings.add(menuItemMutationRatio);
menuSettings.add(menuItemMaxBestAge);
menuSettings.addSeparator();
menuSettings.add(menuItemRMS);
setMenuSettingsActionListeners();
}
menuBar.add(menuPriority);
{
ButtonGroup group=new ButtonGroup();
menuPriority.add(menuItemPriorityHighest);
menuPriority.add(menuItemPriorityHigh);
menuPriority.add(menuItemPriorityNormal);
menuPriority.add(menuItemPriorityLo);
menuPriority.add(menuItemPriorityLowest);
group.add(menuItemPriorityHighest);
group.add(menuItemPriorityHigh);
group.add(menuItemPriorityNormal);
group.add(menuItemPriorityLo);
group.add(menuItemPriorityLowest);
menuItemPriorityNormal.setSelected(true);
setMenuPriorityActionListeners();
}
menuBar.add(menuGraphics);
{
menuGraphics.add(menuItemAntialiasing);
menuItemAntialiasing.setSelected(false);
setMenuGraphicsActionListeners();
}
menuBar.add(menuHelp);
{
menuHelp.add(menuItemAbout);
setMenuHelpActionListeners();
}
//set font for all menus
Component components[]=menuBar.getComponents();
for(Component c:components) {
c.setFont(menuFont);
if(c instanceof JMenu) {
Component components2[]=((JMenu) c).getMenuComponents();
for(Component c2:components2) {
c2.setFont(menuFont);
}
}
}
//set menu bar
parent.gui.setJMenuBar(menuBar);
return this;
}
/**
* Resets the menu labels
* menu labels can change during app lifecycle (eg. Start/Stop)
*/
protected void resetMenu() {
menuProgram.setText("Program");
{
menuItemStart.setText("Start");
menuItemPause.setText("Pause");
menuItemPDFReport.setText("Save PDF report as ...");
menuItemXMLReport.setText("Save XML report as ...");
menuItemXML2PDFReport.setText("Convert XML report to PDF ...");
menuItemExit.setText("Exit");
menuItemPause.setEnabled(false);
menuItemStart.setEnabled(true);
}
menuMaps.setText("Maps");
{
menuItemExportMaps.setText("Save maps as ..");
}
menuEngine.setText("Engine");
menuSettings.setText("Settings");
{
menuItemPopulationSize.setText(alignText("Population size:",parent.configuration.getInitialPopulationSize()));
menuItemPopulationGrow.setText(alignText("Population grow:",parent.configuration.getPopulationGrow()));
menuItemMutationRatio.setText(alignText("Mutation ratio:",parent.configuration.getMutationRatio()));
menuItemMaxBestAge.setText(alignText("Max best age:",parent.configuration.getMaxBestCostAge()));
menuItemRMS.setText("RMS cost");
}
menuGraphics.setText("Grahics");
{
menuItemAntialiasing.setText("Antialiasing");
}
menuHelp.setText("Help");
{
menuItemAbout.setText("About application");
}
menuPriority.setText("Priority");
{
menuItemPriorityHighest.setText("Highest");
menuItemPriorityHigh.setText("High");
menuItemPriorityNormal.setText("Normal");
menuItemPriorityLo.setText("Lo");
menuItemPriorityLowest.setText("Lowest");
}
//enable all dependend menus
enableMenus(true);
}
/**
* Enables/disables all dependent menus
* which should not be anabled when the application is running
* @param enable
*/
protected void enableMenus(boolean enable) {
Component subMenus[]=menuMaps.getMenuComponents();
for(Component menu:subMenus) {
menu.setEnabled(enable);
}
subMenus=menuEngine.getMenuComponents();
for(Component menu:subMenus) {
menu.setEnabled(enable);
}
subMenus=menuSettings.getMenuComponents();
for(Component menu:subMenus) {
menu.setEnabled(enable);
}
}
/**
* Add menu items to menu
*/
protected void addMenuEnginesItems() {
ButtonGroup group=new ButtonGroup();
//add all engines
for(Class e: TSP.engineClasses) {
final Class engineClass=e;
JRadioButtonMenuItem menu=new JAntialiasedRadioButtonMenuItem();
String menuText=e.getSimpleName();
menu.setText(menuText);
//client property - engine class
menu.putClientProperty(menuText,engineClass);
if(parent.engineClass.equals(e)) {
menu.setSelected(true);
}
group.add(menu);
menuEngine.add(menu);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -