/*
 * ControlPanel.java
 *
 * WARNING: This class has been generated by NetBeans (www.netbeans.org)
 * PLEASE use the Form Editor of NetBeans to modify its layout.
 * PLEASE see all Warnings in the code.
 *
 * Created on 17 may 2001, 23.31
 */

package org.joone.edit;

import org.joone.engine.*;
import org.joone.net.NeuralNet;
import org.joone.net.NetChecker;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ControlPanel extends javax.swing.JPanel implements NeuralNetListener {
    
    private Monitor monitor;
    private NeuralNet nNet;
    private PropertySheet parent;
    private NetChecker netChecker;
    private boolean printCycle = false;
    
    /** Creates new form ControlPanel */
    public ControlPanel(NeuralNet nn, PropertySheet ps) {
        setMonitor(nn.getMonitor());
        parent = ps;
        nNet = nn;
        netChecker = new NetChecker(nNet);
        initComponents();
    }
    
    public void setMonitor(Monitor m) {
        monitor = m;
        /* We register this ControlPanel to the Monitor - not to the NeuralNet - object
         * because the listeners list of the Monitor is transient, so we
         * avoid to serialize this ControlPanel when we 'export' the neural net
         */
        monitor.addNeuralNetListener(this);
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {//GEN-BEGIN:initComponents
        jPanel1 = new javax.swing.JPanel();
        runButton = new javax.swing.JButton();
        continueButton = new javax.swing.JButton();
        stopButton = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        cicleLabel = new javax.swing.JLabel();
        cicleValue = new javax.swing.JLabel();
        rmsLabel = new javax.swing.JLabel();
        rmsValue = new javax.swing.JLabel();

        setLayout(new java.awt.GridLayout(2, 1, 0, 10));

        setBorder(new javax.swing.border.TitledBorder("Controls"));
        jPanel1.setLayout(new java.awt.GridLayout(1, 3));

        runButton.setForeground(java.awt.Color.green);
        runButton.setText("Run");
        runButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                runButtonActionPerformed(evt);
            }
        });

        jPanel1.add(runButton);

        continueButton.setForeground(new java.awt.Color(0, 51, 255));
        continueButton.setText("Continue");
        continueButton.setEnabled(false);
        continueButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                continueButtonActionPerformed(evt);
            }
        });

        jPanel1.add(continueButton);

        stopButton.setForeground(java.awt.Color.red);
        stopButton.setText("Pause");
        stopButton.setEnabled(false);
        stopButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                stopButtonActionPerformed(evt);
            }
        });

        jPanel1.add(stopButton);

        add(jPanel1);

        jPanel2.setLayout(new java.awt.GridLayout(2, 2, 0, 8));

        cicleLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        cicleLabel.setText("Epochs :  ");
        cicleLabel.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        jPanel2.add(cicleLabel);

        cicleValue.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        cicleValue.setText("0");
        jPanel2.add(cicleValue);

        rmsLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        rmsLabel.setText("RMSE :  ");
        jPanel2.add(rmsLabel);

        rmsValue.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        rmsValue.setText("0.0");
        jPanel2.add(rmsValue);

        add(jPanel2);

    }//GEN-END:initComponents
    
    private void continueButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_continueButtonActionPerformed
        // Add your handling code here:
        
        // Make sure the network checks out before cotinuing.
        if (netChecker.hasErrors()) {
            displayNogo("Network could not be run.", "See 'To Do List' to check all the errors.");
        } else {
            setLearners();
            nNet.restore();
            setState(false);
        }
    }//GEN-LAST:event_continueButtonActionPerformed
    
    private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_stopButtonActionPerformed
        // Add your handling code here:
        nNet.stop();
    }//GEN-LAST:event_stopButtonActionPerformed
    
    private void runButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_runButtonActionPerformed
        // Add your handling code here:
        
        // Make sure the network checks out before running.
        if (netChecker.hasErrors()) {
            displayNogo("Network could not be run.", "See 'To Do List' to check all the errors.");
        } else {
            setLearners();
            nNet.go();
        }
    }//GEN-LAST:event_runButtonActionPerformed
    
    public void netStopped(NeuralNetEvent e) {
        setState(true);
        printCycle = true;
        parent.update();
    }
    
    public void cicleTerminated(NeuralNetEvent e) {
        int currentCycle = monitor.getTotCicles() - monitor.getCurrentCicle() + 1;
        int cl = currentCycle / parameters.getRefreshingRate();
        /* We want to print the results only every refreshing_rate cycles and the last cycle*/
        if ((cl * parameters.getRefreshingRate()) == currentCycle || monitor.getCurrentCicle() == 1) {
            cicleValue.setText(Integer.toString(currentCycle));
            printCycle = true;
        }
    }
    
    /** Setter for property parameters.
     * @param parameters New value of property parameters.
     */
    public void setParameters(EditorParameters parameters) {
        this.parameters = parameters;
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton continueButton;
    private javax.swing.JLabel cicleLabel;
    private javax.swing.JButton stopButton;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JLabel cicleValue;
    private javax.swing.JButton runButton;
    private javax.swing.JLabel rmsLabel;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel rmsValue;
    // End of variables declaration//GEN-END:variables
    
    private static final long serialVersionUID = 1310288899683080017L;
    
    private EditorParameters parameters;
    
    private void setState(boolean state) {
        runButton.setEnabled(state);
        continueButton.setEnabled(state);
        stopButton.setEnabled(!state);
        parent.setControlsEnabled(state);
    }
    
    public void netStarted(NeuralNetEvent e) {
        setState(false);
    }
    
    public void errorChanged(NeuralNetEvent e) {
        if ((printCycle) || (monitor.getTotCicles() < parameters.getRefreshingRate())) {
            rmsValue.setText(Double.toString(monitor.getGlobalError()));
            printCycle = false;
        }
    }
    
    /**
     * Pops up a dialog window with no-go messages displayed.
     */
    private void displayNogo(String message1, String message2) {
        final JDialog dialog = new JDialog(parent, "Critical Network Error", true);
        dialog.getContentPane().setLayout(new BorderLayout(10, 10));
        
        // Add ok button.
        Button ok = new Button("  OK  ");
        ok.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dialog.dispose();
            }
        });
        Panel p = new Panel();
        p.setLayout(new FlowLayout(FlowLayout.CENTER));
        p.add(ok);
        dialog.getContentPane().add(p, BorderLayout.SOUTH);
        
        // Add banner.
        JLabel label = new JLabel(message1);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        dialog.getContentPane().add(label, BorderLayout.NORTH);
        
        // Add banner.
        label = new JLabel(message2);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        dialog.getContentPane().add(label, BorderLayout.CENTER);
        
        // Center location on parent.
        dialog.pack();
        Point center = new Point(parent.getX() + parent.getWidth() / 2,
        parent.getY() + parent.getHeight() / 2);
        dialog.setLocation((int) (center.getX() - dialog.getWidth() / 2),
        (int) (center.getY() - dialog.getHeight() / 2));
        dialog.setVisible(true);
    }
    
    public void netStoppedError(NeuralNetEvent e,String error) {
        
        setState(true);
        printCycle = true;
        parent.update();
        this.displayNogo("Runtime Error!", error);
        //JOptionPane.showMessageDialog(parent,error, "Critical Network Error!", JOptionPane.ERROR_MESSAGE);
    }
    
    /** Initialization of the available learners
     */
    public void setLearners() {
        // TODO: Implement the reading of the Learners from the XML parameters file
        monitor.addLearner(0, "org.joone.engine.BasicLearner");
        monitor.addLearner(1, "org.joone.engine.BatchLearner");
        monitor.addLearner(2, "org.joone.engine.RpropLearner");
        //monitor.addLearner(3, "org.joone.engine.SwarmLearner");
    }
}

 

Ads help maintain this website.