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

📄 analyzerpanel.java

📁 著名的神经网络工具箱
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************

This program is copyrighted. Please refer to COPYRIGHT.txt for the
copyright notice.

This file is part of JavaNNS.

JavaNNS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

JavaNNS is distributed in the hope that it will be useful,
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with JavaNNS; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*************************************************************************/


package javanns;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.awt.print.*;
import wsi.ra.chart2d.*;

/**
 * AnalyzerPanel is a multifunctional graph panel, which shows certain
 * properties of the network or the pattern set
 */

class AnalyzerPanel extends JPanel implements ActionListener,
                                              Printable,
                                              ChangeListener{

  /**
   * the central body of the program
   */
  Snns snns;

  /**
   *  analyzer's frame
   */
  JInternalFrame frame;


  /**
   * counting the steps
   */
  int time = 0;

  /**
   * the line index ( several lines in different colours can be shown )
   */
  private int lIndex = 0;

  volatile boolean is_testing = false;
  ThreadChief tc;


  /**
   * components of the panels in the frame
   */
  // Components for main panel:
  DArea dArea;
  DPointSet[] points;
  Icon iGridOn, iGridOff;
  FlatButton  bGrid, bClear, bDecreaseX, bIncreaseX, bDecreaseY, bIncreaseY,
              bLeft, bUp, bRight, bDown, bNewLine, bAutoFocus;
  ScaledBorder sbArea;

  // Components for setup panel:
  JComboBox jcbXValues, jcbYValues, jcbErrors;
  JPanel pXDetails, pYDetails;
  JTextField tfXUnitNo, tfYUnitNo;
  JRadioButton rbXAct, rbYAct;
  JCheckBox cbAVE, cbChangeColors;

  // Components for test panel:
  JTextField tfSteps, tfTrainingSteps;
  JButton bTest;
  JCheckBox cbChangePattern, cbTrainNet;
  JLabel lTrainingSteps;

  //Components for axis panel:
  JTextField tfXScale, tfYScale;
  JCheckBox cbXScaleDefault, cbYScaleDefault;
  JButton bApplyPatterns;

  /**
   * constructor of the analyzer
   * the frame is just created not added to the container
   *
   * @param snns the central part of JavaNNS
   */
  public AnalyzerPanel( Snns s ) {
    snns = s;

    JPanel pMain = getMain();

    JTabbedPane pane = new JTabbedPane();
    pane.addTab( "Setup", getSetup() );
    pane.addTab( "Test", getTest() );
    pane.addTab( "Scales", getScale() );

    GridBagLayout gbl = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.insets = snns.panel_insets;
    gbc.weightx = gbc.weighty = .5;
    gbc.gridx = gbc.gridy = 0;
    gbc.fill = gbc.BOTH;
    setLayout( gbl );

    gbl.setConstraints( pMain, gbc );
    add( pMain );

    gbc.gridy = 1;
    gbc.weighty = 0;
    gbl.setConstraints( pane, gbc );
    add( pane );

    frame = new JInternalFrame("Analyzer", true, true, true, true );
    frame.setContentPane( this );
    frame.pack();

    tc = new ThreadChief(){
      public void stopped(Object o){
        if( o instanceof Exception )
          snns.showException((Exception)o, this);
        is_testing = false;
        bTest.setText("Test");
        releaseLogPanel();
      }
    };
  }

  public void addPoint(double x, double y){
    points[lIndex].addDPoint(x,y);
  }

  public void jump(){
    points[lIndex].jump();
    if( cbChangeColors.isSelected() ){
      lIndex++;
      lIndex %= points.length;
    }
  }

/*------------------------- interfaces ---------------------------------------*/

  public void actionPerformed( ActionEvent evt ){
    //System.out.println("Analyzer.actionPerf");
    Object src = evt.getSource();
    DRectangle rect = dArea.getDRectangle();

    if( src == bGrid ){
      if( dArea.isGridVisible() ){
        dArea.setGridVisible( false );
        bGrid.setIcon( iGridOn );
        bGrid.setToolTipText("Turn grid on");
      }
      else{
        dArea.setGridVisible( true );
        bGrid.setIcon( iGridOff );
        bGrid.setToolTipText("Turn grid off");
      }
    }

    else if( src == bClear ) {
      for( int i = 0; i<points.length; i++ ) points[i].removeAllPoints();
      time = lIndex = 0;
    }

    else if( src == jcbXValues ){
      int sel = jcbXValues.getSelectedIndex();
      switch( sel ){
        case 0 : setXUnitPanel(); break;
        case 1 : setXTimePanel(); break;
        case 2 : setXPatNoPanel(); break;
      }
      pXDetails.validate();
    }

    else if( src == jcbYValues ){
      int sel = jcbYValues.getSelectedIndex();
      if( sel == 0 ) setYUnitPanel();
      else setYErrorPanel();
      pYDetails.validate();
    }

    else if( src == jcbErrors ) setYErrorPanel();

    else if( src == bTest ){
      if( is_testing ) tc.stop = true;
      else{
        lockLogPanel();
        bTest.setText("Stop");
        tc.stop = false;
        is_testing = true;
        new Analyzer(this);
      }
    }

    else if( src == bDecreaseX ){
      rect.x += rect.width / 4;
      rect.width /= 2;
      dArea.setVisibleRectangle( rect );
    }

    else if( src == bIncreaseX ){
      rect.width *= 2;
      rect.x -= rect.width / 4;
      dArea.setVisibleRectangle( rect );
    }

    else if( src == bDecreaseY ){
      rect.y += rect.height / 4;
      rect.height /= 2;
      dArea.setVisibleRectangle( rect );
    }

    else if( src == bIncreaseY ){
      rect.height *= 2;
      rect.y -= rect.height / 4;
      dArea.setVisibleRectangle( rect );
    }

    else if( src == bLeft ){
      rect.x -= rect.width / 4 ;
      dArea.setVisibleRectangle( rect );
    }

    else if( src == bUp ){
      rect.y += rect.height / 4 ;
      dArea.setVisibleRectangle( rect );
    }

    else if( src == bRight ){
      rect.x += rect.width / 4 ;
      dArea.setVisibleRectangle( rect );
    }

    else if( src == bDown ){
      rect.y -= rect.height / 4 ;
      dArea.setVisibleRectangle( rect );
    }

    else if( src == cbTrainNet ){
      boolean selected = cbTrainNet.isSelected();
      tfTrainingSteps.setEnabled( selected );
      lTrainingSteps.setEnabled( selected );
    }

    else if( src == bNewLine ) newLine();

    else if( src == bAutoFocus ) dArea.setAutoFocus( true );

    else if( src == bApplyPatterns ){
      String pat = getXFormPattern();
      java.text.DecimalFormat form = new java.text.DecimalFormat();
      if( pat != null ) form.applyPattern(pat);
      sbArea.format_x = form;

      pat = getYFormPattern();
      form = new java.text.DecimalFormat();
      if( pat != null ) form.applyPattern(pat);
      sbArea.format_y = form;

      dArea.repaint();
    }
  }

  public void stateChanged(ChangeEvent e){
    Object src = e.getSource();
    if( src == cbXScaleDefault )
      tfXScale.setEnabled(!cbXScaleDefault.isSelected());
    else if( src == cbYScaleDefault )
      tfYScale.setEnabled(!cbYScaleDefault.isSelected());
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -