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

📄 tspmenu.java.svn-base

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