动态添加动作侦听器到按钮

时间:2015-01-08 12:37:52

标签: java applet actionlistener

我认为这是错误的。我希望我的代码在创建按钮后立即添加actionlistener。有一种方法可以动态地执行此操作。看看内部for循环我有一个问题在那里添加

import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;

/* <applet code = "Gridl.java" width=300 height=200>
   </applet> */

public class Gridl extends Applet 
{
     TextField t1=new TextField("    ");

     public void init()
     {
         int n = 1;
         setLayout(new GridLayout(4,4));
         add(t1);
         setFont(new Font("Tahoma",Font.BOLD,24));

         for(int i=0;i<4;i++)
         {
             for(int j=0;j<4;j++)
             {
                 add(new Button(""+n));        
                 this.addActionListener(this);       // this didnt work :(
                 n++;
             }
         }  
    }

    public void actionPerformed(ActionEvent ae)
    {
        String str = ae.getActionCommand();
        t1.setText(str);
    }

}

2 个答案:

答案 0 :(得分:0)

在创建按钮新按钮()时尝试这样做。添加而不结束该语句。

  new Button("").addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e)
        {
            //Execute when button is pressed
            System.out.println("You clicked the button");
        }
    });    

答案 1 :(得分:0)

我认为您的代码中存在一些概念上的误解。考虑将ActionListener添加到哪个组件非常重要。目前,您的代码将ActionListener添加到扩展Applet的Gridl对象,而不是按钮本身。它不会抛出异常,因为它有效,但它不会给你你想要的行为

为了让你工作,我建议你替换

add(new Button(""+n));

Button b = new Button(""+n);
b.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e)
    {
        System.out.println("You clicked button "+e.getSource().toString());
    }
});

this.add(b);

请注意,这会为每个Button对象设置一个新的ActionListener,其行为由您在actionPerformed()方法中放置的内容决定。您可以对所有按钮具有相同的行为,或者对每个按钮具有不同的行为。

我建议你可能想要阅读oracle Java Swing GUI教程,特别是one on actions。那里也有代码示例。

<强> 编辑:

我意识到你可能想让你的Gridl成为所有按钮的监听器。在这种情况下 - 您可以通过以下方式实现此目的:

public class Gridl extends Applet implements ActionListener
{
     TextField t1=new TextField("    ");

     public void init()
     {
         int n = 1;
         setLayout(new GridLayout(4,4));
         add(t1);
         setFont(new Font("Tahoma",Font.BOLD,24));

         for(int i=0;i<4;i++)
         {
             for(int j=0;j<4;j++)
             {
                 Button b = new Button(""+n));        
                 b.addActionListener(this);
                 this.add(b);
                 n++;
             }
         }  
    }

    public void actionPerformed(ActionEvent ae)
    {
        String str = ae.getActionCommand();
        t1.setText(str);
    }

}