⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tspmenu.java.svn-base

📁 Traveling Salesman Problem Java Genetic Algorithm Solution, Hope all enjoy it.
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
/*
 * $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 + -