我认为这是错误的。我希望我的代码在创建按钮后立即添加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);
}
}
答案 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);
}
}