返回一个值时,被称为一个JButton的actionPerformed事件(return a val

2019-07-20 00:45发布

我有一些问题JButton操作事件,我已经声明了一个全局变量( boolean tc1 )和JButton t1 。 当我按下将JButton我需要改变布尔变量为“真”的价值。 谁能帮我吗? 我的代码放在这里。

class Tracker extends JPanel {
    public static void main(String[] args) {
        new Tracker();    
   }

    public Tracker() {

        JButton tr=new JButton("TRACKER APPLET");
        JButton rf=new JButton("REFRESH");

        boolean tc1=false,tc2=false,tc3=false,tc4=false;
        JButton t1=new JButton(" ");

        t1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                tc1=true;
            }
        });
        System.out.println(tc1);
        //remaining part of the code...
        // here i need to use the value of tc1 for further process..


    }
}

谢谢。

Answer 1:

tc1必须是一个全局变量。
你可以在方法内部定义的另一个类使用局部变量,除非局部变量是final变量。
取出的声明tc1constructor到整体的知名度class

  class Tracker extends JPanel {
  boolean tc1=false,tc2=false,tc3=false,tc4=false;
  public static void main(String[] args) {
    new Tracker();    
  }

public Tracker() {

    JButton tr=new JButton("TRACKER APPLET");
    JButton rf=new JButton("REFRESH");


    JButton t1=new JButton(" ");

    t1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            tc1=true;
        }
    });
    System.out.println(tc1);
    //remaining part of the code...
    // here i need to use the value of tc1 for further process..


   }
}

我也已经遇到了这个问题,幸运的是我找到了解决办法



Answer 2:

你不能在一个匿名内部类(动作监听)更改本地方法变量的值。 但是你可以改变外部类的一个实例变量...所以你可以只移动TC1来跟踪。

class Tracker extends JPanel {
    public static void main(String[] args) {
        new Tracker();
    }

    private boolean tc1; // <=== class level instead...

    public Tracker() {

        JButton t1 = new JButton(" ");

        t1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tc1 = true;
            }
        });
    }
}


Answer 3:

首先,你说, i have declared a global variable(boolean tc1)这里TC1不是一个全局变量,如果你想有一个全局变量,那么你必须声明变量为static

然后,如果你想访问该变量button click event ,那么你可以下面的代码写:

class Tracker extends JPanel
{
    boolean tc1=false,tc2=false,tc3=false,tc4=false;
    public static void main(String[] args) {
        new Tracker();    
    }
    public Tracker()
    {
        JButton tr=new JButton("TRACKER APPLET");
        JButton rf=new JButton("REFRESH");

        JButton t1=new JButton(" ");

        t1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            tc1=true;
            getValue();
        }
        });
    }
    public void getValue()
    {
        System.out.println("values is: "+ tc1);
    }
}


Answer 4:

定义click处理函数:

public void onClick(Boolean tc1){
  System.out.println(tc1) ;
  //Write some logic here and use your updated variable
}

然后:

public Tracker()
{

JButton tr=new JButton("TRACKER APPLET");
JButton rf=new JButton("REFRESH");

boolean tc1=false,tc2=false,tc3=false,tc4=false;
JButton t1=new JButton(" ");

     t1.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
          tc1 = true ;
          onClick(tc1) ;
      }
});


文章来源: return a value when an JButton actionperformed event is called