title: Java, listener advice, swing comp's advice needed :(
body: <p>my problem is, where is says "triangle.addActionListener(new ShapeAction());" in my code there is a error that says ShapeAction symbol is not found, what am i doing wrong here? and could someone look at my If statement, its ment to do: once a menu item is clicked it creates a instance of that shape from another class        </p>
  
  <pre><code>public class MyFrame extends javax.swing.JFrame {
      public MyFrame() {
          // Create the menu
          JMenuBar topMenu = new JMenuBar();
          this.setJMenuBar(topMenu);
  
          //create the menu button "shapes"
          JMenu shapes = new JMenu("Shapes");
          topMenu.add(shapes);
          //Create the 3 shapes for the menu
          JMenuItem square = new JMenuItem("Square");
          square.addActionListener(new ShapeAction());
  
          JMenuItem circle = new JMenuItem("Circle");      
          circle.addActionListener(new ShapeAction());
  
          JMenuItem triangle = new JMenuItem("Triangle");
          triangle.addActionListener(new ShapeAction());
  
          //add shapes to menu
          shapes.add(circle);
          shapes.add(triangle);
          shapes.add(square);
  
          //add the menu
          setJMenuBar(topMenu);
  
  
          MyControlPanel pane = new MyControlPanel();
          getContentPane().add(pane);
  
          this.add(pane);
      }
  
      /**
       * @param args the command line arguments
       */
      public static void main(String args[]) {
          // &lt;snip&gt;
  
          /* Create and display the form */
          java.awt.EventQueue.invokeLater(new Runnable() {
                  public void run() {
                  new MyFrame().setVisible(true);
                  }
                  });
  
          class ShapeAction implements ActionListener{
              public void actionPerformed(ActionEvent e){
                  JMenuItem clickedMenu = (JMenuItem)e.getSource();
  
                  if (clickedMenu.getText().equals("Square")){
                      //implement abstract methods                
                      MyShape aSquare = new ASquare();
  
                  }
                  else if (clickedMenu.getText().equals("Circle")){ 
                      //implement abstract methods
                      MyShape ACircle = new ACircle();
  
                  }
                  else if (clickedMenu.getText().equals("Triangle")){ 
                      //implement abstract methods
                      MyShape ATriangle = new ATriangle();
  
                  }
              }          
          }
      }
  </code></pre>
  
  <hr>
  
  <pre><code>package assignment;
  
  //import java.awt.FlowLayout;
  import java.awt.BorderLayout;
  import java.awt.FlowLayout;
  import javax.swing.GroupLayout;
  import javax.swing.GroupLayout.Alignment;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JSlider;
  import javax.swing.JTextField;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  
  
  public class MyControlPanel extends javax.swing.JPanel {
  
  JSlider slider;
  JLabel sliderLabel;
  JLabel sliderdimension;
  JLabel blank;
  JLabel dl;
  JLabel area1;
  
  /**
   * Creates new form MyControlPanel
   */
  public MyControlPanel() {
  
  
      slider = new JSlider();
      slider.setValue(50);
      slider.addChangeListener(new MyChangeAction());
      slider.setMajorTickSpacing(10);
      slider.setPaintLabels(true);
      slider.setPaintTicks(true);
      slider.setBounds(300, 50, 100, 50);
  
      sliderLabel = new JLabel("50");
      blank = new JLabel("     ");
      sliderdimension = new JLabel("Shape Dimension:");
  
      JTextField boundary_length = new JTextField("Boundary Length");
      JTextField area = new JTextField("Area");
  
      dl = new JLabel("Boundary Length =");
      area1 = new JLabel("Area =");
  
      setLayout(new BorderLayout());
  
  
      JPanel sliderPanel = new JPanel();
      sliderPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0));
  
  
      sliderPanel.add(sliderdimension);
      sliderPanel.add(sliderLabel);
      sliderPanel.add(slider);
      sliderPanel.add(dl);
      sliderPanel.add(boundary_length);
      sliderPanel.add(area1);
      sliderPanel.add(area);
      this.add(sliderPanel, BorderLayout.PAGE_END);
  
  
  
  }
  
  /**
   * 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.
   */
  // &lt;editor-fold defaultstate="collapsed" desc="Generated Code"&gt;                          
  private void initComponents() {
  
      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
      this.setLayout(layout);
      layout.setHorizontalGroup(
          layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGap(0, 400, Short.MAX_VALUE)
      );
      layout.setVerticalGroup(
          layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGap(0, 300, Short.MAX_VALUE)
      );
  }// &lt;/editor-fold&gt;                        
  // Variables declaration - do not modify                     
  // End of variables declaration                   
  
  public class MyChangeAction implements ChangeListener {
  
      //complete code here
      public void stateChanged(ChangeEvent ce) {
          int value = slider.getValue();
          String str = Integer.toString(value);
          sliderLabel.setText(str);
  
  
      }
  } // end class
  
  
  
  
      }
  </code></pre>
  
  <hr>
  
  <pre><code>package assignment;
  
  public abstract class MyShape
   {
  
  double thelength;
  double thearea;
  
  
  
  public abstract double computeBoundaryLength(double Length);
  
  public abstract double computeArea (double Length);
   }
  </code></pre>
  
  <hr>
  
  <pre><code>package assignment;
  
  
  public class ACircle extends MyShape {
  
  @Override
  public double computeBoundaryLength(double Length) 
  {
      thelength=(2*Length*Math.PI);
  return thelength;
  }
  
  @Override
  public double computeArea(double Length) 
  {
      thearea=(Length*Length*Math.PI);
      return thearea;
  }
  
  }
  </code></pre>