因此,我有一堂课,其中设置了一个单选按钮。然后在第二堂课中,我扩展了第一堂课,并制作了3个“if”语句,这些语句将根据单选按钮的输出创建一个applet。在那些“if”语句中,它表示变量无法解析。如何解决这些问题?并且请告诉我我的代码中是否还有其他错误。感谢一百万,:D。

谢谢,任何帮助都会有很大帮助。

//  The First Class Code:


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


public class RadioButton extends JPanel {

    static JFrame frame;

   JLabel pic;
   RadioListener myListener = null;
   public RadioButton() {



       // Create the radio buttons
       JRadioButton displacement = new JRadioButton("Displacement");
       displacement.setMnemonic(KeyEvent.VK_N);
       displacement.setSelected(true);
        //Displacement Button, set to automatically be clicked

       JRadioButton accel = new JRadioButton("Acceleration");
       accel.setMnemonic(KeyEvent.VK_A);
       accel.setActionCommand("acceleration");
        //Acceleration Button

       JRadioButton time = new JRadioButton("Change in time");
       time.setMnemonic(KeyEvent.VK_S);
       time.setActionCommand("deltaT");
        //The change in time button


       // Creates the group of buttons
       ButtonGroup group = new ButtonGroup();
       group.add(displacement);
       group.add(accel);
       group.add(time);

              myListener = new RadioListener();
                displacement.addActionListener(myListener);
                accel.addActionListener(myListener);
                time.addActionListener(myListener);


      // Set up the picture label
       pic = new JLabel(new ImageIcon(""+"numbers" + ".jpg"));          //Set the Default Image

       pic.setPreferredSize(new Dimension(177, 122));


       // Puts the radio buttons down
       JPanel panel = new JPanel();
       panel.setLayout(new GridLayout(0, 1));
       panel.add(displacement);
       panel.add(accel);
       panel.add(time);


       setLayout(new BorderLayout());
       add(panel, BorderLayout.WEST);
       add(pic, BorderLayout.CENTER);
       setBorder(BorderFactory.createEmptyBorder(40,40,40,40));
   }



   //Listening to the buttons
   class RadioListener implements ActionListener {
       public void actionPerformed(ActionEvent e) {
           pic.setIcon(new ImageIcon(""+e.getActionCommand()
                                         + ".jpg"));
       }
   }

   public static void main(String s[]) {
        frame = new JFrame("∆x = Vavg * time");
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {System.exit(0);}
        });

        frame.getContentPane().add(new RadioButton(), BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
   }
}

我的第二堂课,用if语句
    import java.lang.Object;
    import java.awt.Graphics;


    public class RadioButtonMain extends RadioButton {

        public static void main(String [ ] args) {
        if ( displacement.isSelected())
          {
    //Option 1 for applet
          }

        if ( accel.isSelected()) {
            //Option 2 for applet
        }

        else {
            //Option 3 for applet
        }
        }
    }

最佳答案

displacement是构造函数中的局部变量。因此,在构造函数外部将无法访问它。

如果希望类中的其他方法可以访问它,请将其移出构造函数,并使其成为实例字段,方法是在声明JRadioButton displacement;的同一位置,在构造函数上方说myListener。实际上,您已经使用myListener做正确的事情,因此您需要使用displacement做同样的事情。

这将使displacement可被RadioButton类中的其他方法访问,但不能访问诸如RadioButtonMain之类的子类。为了使RadioButtonMain可以访问它,请将字段protected设置为:

protected JRadioButton displacement;

或者,可能更好些,将其设置为private并在RadioButton中添加一个getter方法以返回该字段,因为您可能不希望子类在其喜欢的任何时间更改displacement

另外,请确保在构造函数中更改此设置:
JRadioButton displacement = new JRadioButton("Displacement");

对此:
displacement = new JRadioButton("Displacement");

这样就不会有与该字段同名的局部变量。

最后,请注意main方法是静态的。因此,即使它是在RadioButtonMain中定义的,它也无法访问RadioButtonMain的任何字段,包括displacement。使它像这样:
 public static void main(String [ ] args) {
     new RadioButtonMain().doMain();
 }

 public void doMain() {
    if ( displacement.isSelected())
      {
//Option 1 for applet
      }

    if ( accel.isSelected()) {
        //Option 2 for applet
    }

    else {
        //Option 3 for applet
    }
    }
}

这为您提供了一个RadioButtonMain(也是RadioButton)来使用。请注意,将在调用RadioButton之前调用doMain构造函数,这是您想要的,因为构造函数设置了displacement

09-06 03:32