Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ActionListener中访问此变量?_Java_Actionlistener - Fatal编程技术网

Java 如何在ActionListener中访问此变量?

Java 如何在ActionListener中访问此变量?,java,actionlistener,Java,Actionlistener,您正在动作侦听器中使用以下行声明IDAISALIVE public class DaysAliveGUI { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { DaysAliveGUI window = new D

您正在动作侦听器中使用以下行声明IDAISALIVE

public class DaysAliveGUI {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DaysAliveGUI window = new DaysAliveGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public DaysAliveGUI() {
        initialize();
    }

    private void initialize() {

        JButton jButton_Calculate = new JButton("Calculate");
        jButton_Calculate.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent arg0) {

                int iDayBirth = Integer.parseInt(jTextField_DoBDay.getText());
                int iMonthBirth = Integer.parseInt(jTextField_DoBMonth.getText());
                int iYearBirth = Integer.parseInt(jTextField_DoBYear.getText());

                int iDayCurrent = Integer.parseInt(jTextField_CdDay.getText());
                int iMonthCurrent = Integer.parseInt(jTextField_CdMonth.getText());
                int iYearCurrent = Integer.parseInt(jTextField_CdYear.getText());

                double iDaysAlive;

                Calendar caBirthDate = new GregorianCalendar(iYearBirth, iMonthBirth - 1, iDayBirth);
                Calendar caCurrentDate = new GregorianCalendar(iYearCurrent, iMonthCurrent - 1, iDayCurrent);

                iDaysAlive = caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis();
    iDaysAlive = iDaysAlive / (24 * 60 * 60 * 1000) + 1;
            }
        });

        jButton_Calculate.setFont(new Font("Calibri", Font.BOLD, 15));
        jButton_Calculate.setBounds(180, 205, 103, 23);
        frame.getContentPane().add(jButton_Calculate);

        /* Here is the error:
           iDaysAlive cannot be resolved to a variable*/
        JLabel lblDaysAlive = new JLabel("Days Alive: " + iDaysAlive);

        lblDaysAlive.setFont(new Font("Calibri", Font.BOLD, 18));
        lblDaysAlive.setBounds(135, 257, 147, 21);
        frame.getContentPane().add(lblDaysAlive);

    }
}
如果它是在动作侦听器中声明的,则不能在外部使用它


您需要定义iDaysAlive,它位于可以通过inialize函数访问的位置。我建议将其设置为类的字段。

您在动作监听器中用该行声明iDaysAlive

public class DaysAliveGUI {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DaysAliveGUI window = new DaysAliveGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public DaysAliveGUI() {
        initialize();
    }

    private void initialize() {

        JButton jButton_Calculate = new JButton("Calculate");
        jButton_Calculate.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent arg0) {

                int iDayBirth = Integer.parseInt(jTextField_DoBDay.getText());
                int iMonthBirth = Integer.parseInt(jTextField_DoBMonth.getText());
                int iYearBirth = Integer.parseInt(jTextField_DoBYear.getText());

                int iDayCurrent = Integer.parseInt(jTextField_CdDay.getText());
                int iMonthCurrent = Integer.parseInt(jTextField_CdMonth.getText());
                int iYearCurrent = Integer.parseInt(jTextField_CdYear.getText());

                double iDaysAlive;

                Calendar caBirthDate = new GregorianCalendar(iYearBirth, iMonthBirth - 1, iDayBirth);
                Calendar caCurrentDate = new GregorianCalendar(iYearCurrent, iMonthCurrent - 1, iDayCurrent);

                iDaysAlive = caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis();
    iDaysAlive = iDaysAlive / (24 * 60 * 60 * 1000) + 1;
            }
        });

        jButton_Calculate.setFont(new Font("Calibri", Font.BOLD, 15));
        jButton_Calculate.setBounds(180, 205, 103, 23);
        frame.getContentPane().add(jButton_Calculate);

        /* Here is the error:
           iDaysAlive cannot be resolved to a variable*/
        JLabel lblDaysAlive = new JLabel("Days Alive: " + iDaysAlive);

        lblDaysAlive.setFont(new Font("Calibri", Font.BOLD, 18));
        lblDaysAlive.setBounds(135, 257, 147, 21);
        frame.getContentPane().add(lblDaysAlive);

    }
}
如果它是在动作侦听器中声明的,则不能在外部使用它


您需要定义iDaysAlive,它位于可以通过inialize函数访问的位置。我建议将其设置为类的字段。

您在动作监听器中用该行声明iDaysAlive

public class DaysAliveGUI {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DaysAliveGUI window = new DaysAliveGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public DaysAliveGUI() {
        initialize();
    }

    private void initialize() {

        JButton jButton_Calculate = new JButton("Calculate");
        jButton_Calculate.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent arg0) {

                int iDayBirth = Integer.parseInt(jTextField_DoBDay.getText());
                int iMonthBirth = Integer.parseInt(jTextField_DoBMonth.getText());
                int iYearBirth = Integer.parseInt(jTextField_DoBYear.getText());

                int iDayCurrent = Integer.parseInt(jTextField_CdDay.getText());
                int iMonthCurrent = Integer.parseInt(jTextField_CdMonth.getText());
                int iYearCurrent = Integer.parseInt(jTextField_CdYear.getText());

                double iDaysAlive;

                Calendar caBirthDate = new GregorianCalendar(iYearBirth, iMonthBirth - 1, iDayBirth);
                Calendar caCurrentDate = new GregorianCalendar(iYearCurrent, iMonthCurrent - 1, iDayCurrent);

                iDaysAlive = caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis();
    iDaysAlive = iDaysAlive / (24 * 60 * 60 * 1000) + 1;
            }
        });

        jButton_Calculate.setFont(new Font("Calibri", Font.BOLD, 15));
        jButton_Calculate.setBounds(180, 205, 103, 23);
        frame.getContentPane().add(jButton_Calculate);

        /* Here is the error:
           iDaysAlive cannot be resolved to a variable*/
        JLabel lblDaysAlive = new JLabel("Days Alive: " + iDaysAlive);

        lblDaysAlive.setFont(new Font("Calibri", Font.BOLD, 18));
        lblDaysAlive.setBounds(135, 257, 147, 21);
        frame.getContentPane().add(lblDaysAlive);

    }
}
如果它是在动作侦听器中声明的,则不能在外部使用它


您需要定义iDaysAlive,它位于可以通过inialize函数访问的位置。我建议将其设置为类的字段。

您在动作监听器中用该行声明iDaysAlive

public class DaysAliveGUI {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DaysAliveGUI window = new DaysAliveGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public DaysAliveGUI() {
        initialize();
    }

    private void initialize() {

        JButton jButton_Calculate = new JButton("Calculate");
        jButton_Calculate.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent arg0) {

                int iDayBirth = Integer.parseInt(jTextField_DoBDay.getText());
                int iMonthBirth = Integer.parseInt(jTextField_DoBMonth.getText());
                int iYearBirth = Integer.parseInt(jTextField_DoBYear.getText());

                int iDayCurrent = Integer.parseInt(jTextField_CdDay.getText());
                int iMonthCurrent = Integer.parseInt(jTextField_CdMonth.getText());
                int iYearCurrent = Integer.parseInt(jTextField_CdYear.getText());

                double iDaysAlive;

                Calendar caBirthDate = new GregorianCalendar(iYearBirth, iMonthBirth - 1, iDayBirth);
                Calendar caCurrentDate = new GregorianCalendar(iYearCurrent, iMonthCurrent - 1, iDayCurrent);

                iDaysAlive = caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis();
    iDaysAlive = iDaysAlive / (24 * 60 * 60 * 1000) + 1;
            }
        });

        jButton_Calculate.setFont(new Font("Calibri", Font.BOLD, 15));
        jButton_Calculate.setBounds(180, 205, 103, 23);
        frame.getContentPane().add(jButton_Calculate);

        /* Here is the error:
           iDaysAlive cannot be resolved to a variable*/
        JLabel lblDaysAlive = new JLabel("Days Alive: " + iDaysAlive);

        lblDaysAlive.setFont(new Font("Calibri", Font.BOLD, 18));
        lblDaysAlive.setBounds(135, 257, 147, 21);
        frame.getContentPane().add(lblDaysAlive);

    }
}
如果它是在动作侦听器中声明的,则不能在外部使用它


您需要定义iDaysAlive,它位于可以通过inialize函数访问的位置。我建议将其设置为类的字段。

您可以将变量设置为全局变量,以使其在类中可访问

您可以在方法之外初始化
iDaysAlive

        double iDaysAlive;
您还可以将其设置为
静态变量
,并创建
getter
setter

像这样:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果你想赋值,你可以这样做:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果我们要实现您的公式,它将如下所示:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果要获取值,可以这样调用:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
更新: 在这里添加静态变量以及getter和setter方法:

getIDaysAlive();

您可以将变量设置为全局变量,以使其在类中可访问

您可以在方法之外初始化
iDaysAlive

        double iDaysAlive;
您还可以将其设置为
静态变量
,并创建
getter
setter

像这样:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果你想赋值,你可以这样做:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果我们要实现您的公式,它将如下所示:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果要获取值,可以这样调用:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
更新: 在这里添加静态变量以及getter和setter方法:

getIDaysAlive();

您可以将变量设置为全局变量,以使其在类中可访问

您可以在方法之外初始化
iDaysAlive

        double iDaysAlive;
您还可以将其设置为
静态变量
,并创建
getter
setter

像这样:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果你想赋值,你可以这样做:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果我们要实现您的公式,它将如下所示:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果要获取值,可以这样调用:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
更新: 在这里添加静态变量以及getter和setter方法:

getIDaysAlive();

您可以将变量设置为全局变量,以使其在类中可访问

您可以在方法之外初始化
iDaysAlive

        double iDaysAlive;
您还可以将其设置为
静态变量
,并创建
getter
setter

像这样:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果你想赋值,你可以这样做:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果我们要实现您的公式,它将如下所示:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
如果要获取值,可以这样调用:

public class DaysAliveGUI {
   double iDaysAlive = 0;
public static void main(String[] args) {
 ....
static double iDaysAlive;

 public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
setIDaysAlive(123);
setIDaysAlive( caCurrentDate.getTimeInMillis() - caBirthDate.getTimeInMillis() );

setIDaysAlive( getIDaysAlive() / (24 * 60 * 60 * 1000) + 1 );
更新: 在这里添加静态变量以及getter和setter方法:

getIDaysAlive();

由于您在action listener下面声明了
lblDaysAlive
,因此无法在listener中访问它。正如其他人所建议的,通过声明它的类范围使它成为实例变量

如果仍要在方法中声明它,请尝试将声明与
jButton\u Calculate
一起移动:

static double iDaysAlive;

  public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DaysAliveGUI window = new DaysAliveGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

由于您在action listener下面声明了
lblDaysAlive
,因此无法在listener中访问它。正如其他人所建议的,通过声明它的类范围使它成为实例变量

如果仍要在方法中声明它,请尝试将声明与
jButton\u Calculate
一起移动:

static double iDaysAlive;

  public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DaysAliveGUI window = new DaysAliveGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

由于您在action listener下面声明了
lblDaysAlive
,因此无法在listener中访问它。正如其他人所建议的,通过声明它的类范围使它成为实例变量

如果仍要在方法中声明它,请尝试将声明与
jButton\u Calculate
一起移动:

static double iDaysAlive;

  public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DaysAliveGUI window = new DaysAliveGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

由于您在action listener下面声明了
lblDaysAlive
,因此无法在listener中访问它。正如其他人所建议的,通过声明它的类范围使它成为实例变量

如果仍要在方法中声明它,请尝试将声明与
jButton\u Calculate
一起移动:

static double iDaysAlive;

  public static void setIDaysAlive(double _iDaysAlive ){
   iDaysAlive = _iDaysAlive;
 }
 public static double getIDaysAlive(){
    return iDaysAlive;
 }
public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DaysAliveGUI window = new DaysAliveGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


将变量初始化为全局变量,可以在主变量之外对其进行初始化。顺便说一句,您想访问什么变量?在
DaysAliveGUI
类中,在函数外部创建您想访问的变量作为全局变量。然后从函数内部初始化这些变量..iDaysAlive是我试图访问的变量,我在main外部对其进行了初始化,但在ActionListener外部返回值0。但在其内部,它返回了正确的value@theSwein,检查我的asnwer,将变量设置为静态,并实现getter和setter。您是否已经删除了这一行
double-iDaysAlive在初始化函数?上,删除该函数并将其传输到方法外部。将变量初始化为全局变量,可以在主函数外部初始化它。顺便说一句,您想访问什么变量?在
DaysAliveGUI
类中,在函数外部创建您想访问的变量作为全局变量。然后从内存中初始化这些变量