无法从另一个类访问变量

时间:2014-12-31 05:41:28

标签: java variables applet

所以,我有一个班级,里面设有一个单选按钮。然后在第二个类中,我扩展了第一个类,并根据单选按钮的输出创建了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
        }
        }
    }

2 个答案:

答案 0 :(得分:2)

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

如果你希望它可以被类中的其他方法访问,可以将它移出构造函数并将其作为实例字段,在构造函数上方说JRadioButton displacement;,在声明{{{ 1}}。事实上,您已经使用myListener做了正确的事情,因此您需要使用myListener执行相同的操作。

这将使displacement类中的其他方法可以访问displacement,但不能访问RadioButton之类的子类。要使RadioButtonMain可以访问该字段,请填写字段RadioButtonMain

protected

或者,可能更好,使其成为protected JRadioButton displacement; 并向private添加一个getter方法以返回该字段,因为您可能不希望子类在他们感觉到的任何时候更改RadioButton喜欢它。

另外,请确保在构造函数中更改此内容:

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

答案 1 :(得分:1)

displacement不是要访问的全局变量。在您无法访问的method or constructor内。