在java中获取Variables值的问题。变量范围

时间:2014-12-27 19:05:56

标签: java netbeans scope

这是我的代码,其输出如下图所示。 我需要在mousePressed()方法之外获取x_coor和y_coor的值。但我无法做到。我到目前为止已经尝试了

  1. Constructor

  2. 中声明变量
  3. 将变量声明为全局变量。

  4. 将变量声明为静态。

  5. main()中声明变量。

  6. 但到目前为止我还没想到。

    注意:请勿提及我已经知道的问题。我需要解决方案

     public class Tri_Angle extends MouseAdapter {
    
        Tri_Angle(){
          //            int  x_coor=0;
          //          int y_coor=0;
        }
    
    public static void main(String[] args) {
    
        JFrame frame = new JFrame ();  
    
        final int FRAME_WIDTH = 500;  
        final int FRAME_HEIGHT = 500;  
    
        frame.setSize (FRAME_WIDTH, FRAME_HEIGHT);         
          frame.addMouseListener(new MouseAdapter() { 
          @Override
          public void mousePressed(MouseEvent me) { 
          int    x_coor= me.getX();
          int   y_coor= me.getY();
          System.out.println("clicked at (" + x_coor + ", " + y_coor + ")");        
          } 
    
        });
    
        frame.setTitle("A Test Frame");  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.setVisible(true);  
    
    //This is what i want to do, but it does not know x_coor variable here. 
    
               if(x_coor>=0)
               {
                         System.out.println("clicked at (" + x_coor + ", " + y_coor + ")");
               }       
        }
     }
    

    enter image description here

2 个答案:

答案 0 :(得分:1)

x_coor和y_coor是您定义的mousePressed函数中定义的局部变量。由于它们是该函数的本地函数,因此您无法在该函数之外访问它们。正如您尝试的那样。

您可以将它们声明为成员变量,并编写MouseAdapter mousePressed覆盖例程来更新它们。然后,您希望将Tri_Angle对象作为mouseListener添加到帧中,而不仅仅是mouseListener对象。例如:

public class Tri_Angle extends MouseAdapter {
  int x_coor, y_coor;

  Tri_Angle()
  {
    x_coor = 0;
    y_coor = 0;
  }

  @Override
  public void mousePressed(MouseEvent me)
  {
    x_coor = me.getX();
    y_coor = me.getY();
  }

public static void main(String[] args)
{

  // code...
  frame.addMouseListener(new Tri_Angle());

  // Access x_coor and y_coor as needed

}

另请注意,主例程中的if(x_coor> = 0)语句只会运行一次(朝向程序的开头)。每次按下鼠标时都不会运行。如果你想在每次按下鼠标时运行一些东西,那就需要在你的mousePressed例程中。

答案 1 :(得分:0)

在main方法中声明变量并初始化

public class Tri_Angle extends MouseAdapter {
.....
public static void main(String[] args) {
 int x_coor =0 , y_coor=0;
 ......
}
.....
}