2015-10-19 2 views
1
public class string implements ActionListener{ 

    JLabel jlab; 

    public void actionPerformed(ActionEvent Ae){ 
     jlab.setText(Ae.getActionCommand()); 
    } 

     public static void main(String args[]){ 
      JFrame j = new JFrame("HP"); 
      j.setSize(300,300); 
      j.setLayout(new FlowLayout()); 
      j.setDefaultCloseOperation(j.EXIT_ON_CLOSE); 
      j.setVisible(true);  

     jlab=new JLabel("Here"); 
     j.add(jlab); 

      JButton j1=new JButton("Button1"); 
      j1.setActionCommand("Your pressed Button 1"); 

      j1.addActionListener(this); 

      j.add(j1); 

      JButton j2=new JButton("Button2"); 
      j2.setActionCommand("Your pressed Button 1"); 
      j2.addActionListener(this); 
      j.add(j2); 
    } 
    } 

Я хочу обрабатывать действия нескольких кнопок, используя тот же EventHandler. Когда кнопки будут нажаты, текст метки будет соответствующим образом изменен.ActionListener для нескольких кнопок-Swing

Этот код показывает ошибку,

Non static variable this cannot be referenced from a static context. 

Как я могу исправить этот код?

+2

Большая часть материала в основной метод должен быть перемещен в конструктор или статический '' INIT) методом, не (. Это решило бы ближайшую проблему - так как «это» будет существовать. –

+0

См. Также http://stackoverflow.com/search?tab=relevance&q=%5bjava%5d%20Non%20static%20variable%20this%20cannot%20be%20referenced%20from%20a%20static%20context.%20 –

ответ

1

Есть два пути решения вашей проблемы:

  1. Используйте конструктор

    public class buttons1 implements ActionListener{ 
    
         JLabel jlab; 
    
         buttons1(){ 
    
    
           JFrame j = new JFrame("HP"); 
           j.setSize(300,300); 
           j.setLayout(new FlowLayout()); 
           j.setDefaultCloseOperation(j.EXIT_ON_CLOSE); 
           j.setVisible(true);  
    
           jlab=new JLabel("Here"); 
           j.add(jlab); 
    
           JButton j1=new JButton("Button1"); 
           j1.setActionCommand("Your pressed Button 1"); 
    
           j1.addActionListener(this); 
    
           j.add(j1); 
    
           JButton j2=new JButton("Button2"); 
           j2.setActionCommand("Your pressed Button 2"); 
           j2.addActionListener(this); 
           j.add(j2); 
    
    
         } 
    
         public void actionPerformed(ActionEvent Ae){ 
    
            jlab.setText(Ae.getActionCommand()); 
    
         } 
    
    
    
         public static void main(String args[]){ 
          new buttons1(); 
         } } 
    
  2. Или создать объект того же класса в пределах основной и передать его addActionListener способ. Также сделайте статичным JLabel.

    public class buttons2 implements ActionListener{ 
        static JLabel jlab; 
    
        public void actionPerformed(ActionEvent Ae){ 
    
              jlab.setText(Ae.getActionCommand()); 
    
             } 
    
    
    
        public static void main(String args[]){ 
    
         buttons2 s = new buttons2(); 
    
         JFrame j = new JFrame("HP"); 
          j.setSize(300,300); 
          j.setLayout(new FlowLayout()); 
          j.setDefaultCloseOperation(j.EXIT_ON_CLOSE); 
          j.setVisible(true);  
    
          jlab=new JLabel("Here"); 
          j.add(jlab); 
    
          JButton j1=new JButton("Button1"); 
          j1.setActionCommand("Your pressed Button 1"); 
    
          j1.addActionListener(s); 
    
          j.add(j1); 
    
          JButton j2=new JButton("Button2"); 
          j2.setActionCommand("Your pressed Button 2"); 
          j2.addActionListener(s); 
          j.add(j2); 
         } 
        } 
    
0

Важно понимать, что такое переменная static и как она работает. Статические переменные не могут ссылаться на нестатический контекст.

import javax.swing.JLabel; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import java.awt.FlowLayout; 

public class Stackoverflow implements ActionListener{ 

    private JLabel jlab; /* It's a good practice to make your variables private or protected */ 



    public static void main(String args[]){ 
     new Stackoverflow(); 
    } 
    public Stackoverflow(){ 
      JFrame j = new JFrame("HP"); 
      j.setSize(300,300); 
      j.setLayout(new FlowLayout()); 
      j.setDefaultCloseOperation(j.EXIT_ON_CLOSE); 
      j.setVisible(true);  

      jlab=new JLabel("Here"); 
      j.add(jlab); 

      JButton j1=new JButton("Button1"); 
      j1.setActionCommand("Your pressed Button 1"); 

      j1.addActionListener(this); 

      j.add(j1); 

      JButton j2=new JButton("Button2"); 
      j2.setActionCommand("Your pressed Button 2"); 
      j2.addActionListener(this); 
      j.add(j2); 
    } 
    public void actionPerformed(ActionEvent Ae){ 
     jlab.setText(Ae.getActionCommand()); 
    } 
} 
Смежные вопросы