感谢您为我看这个,这是我的问题:
MyFrame 类中的 If 语句说“MyShape 是抽象的,无法实例化”我也不知道如何完成我的 actionlistener,以便它创建我从 jmenu 中选择的形状的实例。最后将我的 Jslider 的尺寸设置为我的 sqaure 的大小和面积,并将其添加到 JtextField。
- 如何修复错误“MyShape 是抽象的,无法实例化”?
 - 关于如何完成我的 if 语句的任何提示,以便我选择的形状链接到我的 Jslider,以便将它的值添加到该形状,即方形或圆形类?
 - 然后我如何将 2 种方法用于查找该类的长度和面积,即正方形或圆形到 2 个 Jtext 字段?
 
我很乐意为您提供任何帮助,如果您能解释一下我需要做的事情,那么对于像我这样的编程新手来说,这是一种简单的方法可以理解:)
我的框架
    package assignment;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    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");
    JMenuItem circle = new JMenuItem("Circle");
    JMenuItem triangle = new JMenuItem("Triangle");
    //add shapes to menu
    shapes.add(circle);
    shapes.add(triangle);
    shapes.add(square);
    //add the menu
    setJMenuBar(topMenu);
    MyControlPanel pane = new MyControlPanel();
    this.add(pane);
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().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)
    );
    pack();
    }// </editor-fold>                        
/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>
    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MyFrame().setVisible(true);
        }
    });
    class squareAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            JMenuItem clickedMenu = (JMenuItem) e.getSource();
            if (clickedMenu.getText().equals("Square")) {
                MyShape ASquare = new MyShape() {
                };
            } else if (clickedMenu.getText().equals("Circle")) {
                MyShape Circle = new MyShape();
            } else if (clickedMenu.getText().equals("Triangle")) {
                MyShape Triangle = new MyShape();
            }
        }
    }
    }
    }
Jpanel - 我的控制面板
    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.
 */
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
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)
    );
}// </editor-fold>                        
// 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
    }
我的形状
    package assignment;
    public abstract class MyShape
 {
double thelength;
double thearea;
public abstract double computeBoundaryLength(double Length);
public abstract double computeArea (double Length);
 }
一个正方形
    package assignment;
    public class ASquare extends MyShape {
@Override
public double computeBoundaryLength(double Length) 
{
    thelength=(4*Length);
    return thelength;
}
@Override
public double computeArea(double Length) 
{
    thearea=(Length*Length);
    return thearea;
}
}
类 shapeAction 实现 ActionListener{ public void actionPerformed(ActionEvent e){
            JMenuItem clickedMenu = (JMenuItem)e.getSource();
            if (clickedMenu.getText().equals("Square")){
                 //implement abstract methods
            MyShape ASquare = new ASquare();  
            ASquare.addActionListener(new shapeAction());
            }
            else if (clickedMenu.getText().equals("Circle")){ 
                 //implement abstract methods
                MyShape ACircle = new ACircle();
            ACircle.addActionListener(new shapeAction());
            }
            else if (clickedMenu.getText().equals("Triangle")){ 
                 //implement abstract methods
                MyShape ATriangle = new ATriangle();
            ATriangle.addActionListener(new shapeAction());