Как использовать переменную внутри фразы кнопки снаружи?

Я пытаюсь построить программу, которая имела бы кнопку, метку, которая дает мне, сколько раз я нажимал на кнопку. Но номер также требуется в некоторых других местах в программе. Вот почему мне интересно, как применить переменную во второй раз?

    jb.addActionListener(new ActionListener()
            {



                @Override
                public void actionPerformed(ActionEvent e) {
                        // TODO Auto-generated method stub
                        number = 0;
                        number++;
                        .......
                    }

          });
     .......
    //String s = "good" + number;
    //jf.setText(s);
    // How to have the variable "number" be still avaliable here?

   }// end of some method...

public static void main(String[] args) {
    button2 t = new button2();
}

}

3 ответа

  1. Объявите numberкак личное поле и увеличьте значение numberпри нажатии на кнопку. Ваш код будет сбрасывать значение number0 (ноль), каждый раз, когда кнопка нажата, а затем добавить 1 к нему, в результате numberчего всегда будет равным 1.

    private int number;
    
    jb.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        number++;
      }
    };
    
    public static void main(String[] args) {
      button2 t = new button2();
    }
    
  2. Объявите ваш numberкак класс/статическую переменную, то вы можете получить к нему доступ.

    см. также,

    class SomeName{
    private static int number = 0;
    ......
    
    jb.addActionListener(new ActionListener()
                {
    
    
    
                    @Override
                    public void actionPerformed(ActionEvent e) {
                            // TODO Auto-generated method stub\
                            number = 0;
                            number++; // here you can access number without any issue.
                            .......
                        }
    
              });
    
     .......
        String s = "good" + number; // here you can access number without any issue.
        jf.setText(s);
    
       }// end of some method...
    
    
    }
    
  3. Я считаю, что проблема с вашим приложением заключается в том , что вы хотите получить доступ к номеру во время инициализации вашегоJFrame, но вы должны делать это в своем actionListenerметоде вместо этого. Инициализация должна выполняться только один раз, и при нажатии кнопки она не будет выполняться снова. Вот пример кода, как это работает:

    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    
    public class button2 extends JFrame {
    
        int num = 0;
        JButton b;
        JTextField jtf;
    
        public button2()
        {
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            b = new JButton("Clickme");
            jtf = new JTextField("");
            b.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    num++;
                    jtf.setText("good " + num);
                    System.out.println("This prints every time I click the button");
                }
            });
    
    
            System.out.println("This only prints once");
    
            //String s = "good" + number;
            //jf.setText(s);  <--- Moved into the actionListener
            // How to have the variable "number" be still available here?
    
            this.setLayout(new GridLayout(0,1));
            this.add(jtf);
            this.add(b);
            this.pack();
        }
        public static void main(String...banana) { new button2(); }
    }