![](/img/trans.png)
[英]ActionListener - adding action to a ArrayList of JButtons
[英]Adding ActionListener to JButtons
尝试实现ActionListener时收到以下错误
EmployeesApplet.java:5: error: EmployeesApplet is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener public class EmployeesApplet extends JApplet implements ActionListener ^ 1 error
我不想使EmployeesApplet
abstract
因为它不必是abstract
。 我的代码如下,请注意,我注释掉了implements ActionListener
的implements ActionListener
,并将JButtons
添加为ActionListener
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class EmployeesApplet extends JApplet //implements ActionListener
{
public JButton sd = new JButton ("Salaried");
public JButton hr = new JButton ("Hourly");
public JButton cm = new JButton ("Commissioned");
public JButton cl = new JButton ("Clear");
private final int FIELDS = 8,
FIELD_WIDTH = 20;
private String[] strings = new String[FIELDS];
private TextFieldWithLabel[] tf = new TextFieldWithLabel[FIELDS];
private JTextArea ta = new JTextArea(5,25);
public void init()
{
String[] s = {"First Name", "Last Name", "Employee ID", "(a) Salaried: Weekly Salary", "(b1) Hourly 1: Rate Per Hour",
"(b2) Hourly 2: Hours Worked" , "(c1) Commissioned: Rate", "(c2) Commissioned: Gross Sales" };
//----------------------
// Set up the Structure
//----------------------
Container c = getContentPane();
JPanel f = new JPanel(new FlowLayout());
JPanel b = new JPanel(new BorderLayout(2,0));
JPanel glb = new JPanel(new GridLayout(8,1,0,2));
JPanel gtf = new JPanel(new GridLayout(8,1,0,2));
JPanel flb = new JPanel(new FlowLayout());
// Add FlowLayout to the container
c.add(f);
// Add BorderLayout to the FlowLayout
f.add(b);
//---------------------------------------
//Add JPanels to the BorderLayout regions
//---------------------------------------
// Add JLables to GridLayout in West
b.add(glb, BorderLayout.WEST);
for (int i = 0; i < tf.length; i++)
{
tf[i] = new TextFieldWithLabel(s[i], FIELD_WIDTH);
glb.add(tf[i].getLabel());
}
// Add JTextFeilds to GridLayout in East
b.add(gtf, BorderLayout.EAST);
for (int i = 0; i < tf.length; i++)
{
tf[i] = new TextFieldWithLabel(s[i], FIELD_WIDTH);
tf[i].getTextField();
gtf.add(tf[i].getTextField());
}
// Add JButtons to FlowLayout in South
b.add(flb, BorderLayout.SOUTH);
flb.add(sd);
flb.add(hr);
flb.add(cm);
flb.add(cl);
//sd.addActionListener(this);
//hr.addActionListener(this);
//cm.addActionListener(this);
//cl.addActionListener(this);
// Add JTextArea and make it not editable
f.add(ta);
ta.setEditable(false);
}
public void readFields()
{
}
public void fieldsExist()
{
}
public void fieldsEmpty()
{
}
public void actionPerformed()
{
}
}
您的actionPerformed
方法需要一个ActionEvent
作为其参数:
public void actionPerformed(ActionEvent e) {
}
否则,您将不会覆盖ActionListener
定义的方法 -您只会创建一个新方法。 由于ActionListener
是接口,所以您需要实现接口中定义的所有方法,因此会出现错误。
使用ActionEvent
参数声明actionPerformed
方法,以传递有关事件的方法详细信息(哪个组件触发了事件, 操作命令等)。 没有ActionEvent
参数,就没有简单的方法来收集此类信息。 执行动作时,将创建一个ActionEvent
对象,并填充事件信息,然后将调用您的actionPerformed
方法,该ActionEvent
方法将作为参数传入。
您的课程正在实现ActionListener
接口
因此,您有2个选项...使类抽象化或实现actionPerformed
方法
第一个看起来像您所需要的...。
因此,请尝试执行以下操作:
public class EmployeesApplet extends JApplet implements ActionListener {
....
....
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.