【发布时间】:2016-05-10 16:25:18
【问题描述】:
Java 新手,一直在创建 atm 程序,当我编译时,我得到 class is not an abstract 错误,并且不会覆盖 ActionListener 中的抽象方法 actionperformed(ActionEvent)
公共类 ATM 扩展 JFrame 实现 ActionListener
import java.util.Arrays;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ATM extends JFrame implements ActionListener {
private JLabel labelPassword = new JLabel("Enter password:");
private JLabel labelConfirmPassword = new JLabel("Confirm password:");
private JPasswordField passwordField1 = new JPasswordField(20);
private JPasswordField passwordField2 = new JPasswordField(20);
private JButton buttonOK = new JButton("OK");
Label lab=new Label(" ");
Label lab1=new Label(" ");
TextField t[]=new TextField [4];
Label l[]=new Label [4];
Button but=new Button("Create Account");
Button but1=new Button("Enter");
BankAccount b;
ATM()
{
addWindowListener(new NewWindowAdapter());
setLayout(new GridLayout(2,0));
Panel p=new Panel();
Panel p1=new Panel();
but.addActionListener(this);
but1.addActionListener(this);
p.setLayout(new GridLayout(5,2));
p1.add(lab1);
p1.add(lab);
add(labelPassword);
add(passwordField1);
add(labelConfirmPassword);
add(passwordField2);
add(buttonOK);
l[0]=new Label("Account Number");
l[1]=new Label("Initial Balance");
l[2]=new Label("Deposit Amount");
l[3]=new Label("Withdraw Amount");
for(int i=0;i<4;i++)
{
t[i]=new TextField(10);
p.add(l[i]);
p.add(t[i]);
}
but1.setVisible(false);
l[2].setVisible(false);
l[3].setVisible(false);
t[2].setVisible(false);
t[3].setVisible(false);
buttonOK.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
buttonOKActionPerformed(event);
}
});
}
String testAccount(int d_amt,int w_amt)
{
String msg;
b.deposit(d_amt);
msg="Transaction Succesful";
try
{
b.withdraw(w_amt);
}catch(FundsInsufficientException fe)
{
fe=new FundsInsufficientException(b.amount,w_amt);
msg=String.valueOf(fe);
}
return msg;
}
private void buttonOKActionPerformed(ActionEvent event) {
char[] password1 = passwordField1.getPassword();
char[] password2 = passwordField2.getPassword();
if (!Arrays.equals(password1, password2)) {
JOptionPane.showMessageDialog(ATM.this,
"Passwords do not match!");
return;
}
char[] correctPass = new char[] {'J', 'a', 'm', 'e', 's'};
if (Arrays.equals(password1, correctPass)) {
b=new BankAccount(Integer.parseInt(t[0].getText()),Integer.parseInt(t[1].getText()));
but1.setVisible(true);
l[2].setVisible(true);
l[3].setVisible(true);
t[2].setVisible(true);
t[3].setVisible(true);
but.setVisible(false);
l[0].setVisible(false);
l[1].setVisible(false);
t[0].setVisible(false);
t[1].setVisible(false);
lab1.setText("Account : "+b.accnum+", Current Balance : "+b.amount);
return;
} else {
JOptionPane.showMessageDialog(ATM.this,
"Wrong password!");
}
}
public static void main(String arg[])
{
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ATM().setVisible(true);
}
});
ATM use=new ATM();
use.setTitle("James' Cash Machine");
use.setSize(600,300);
use.setVisible(true);
}
}
class NewWindowAdapter extends WindowAdapter
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
}
class BankAccount
{
int accnum;
int amount;
BankAccount(int num,int amt)
{
accnum=num;
amount=amt;
}
public void deposit(int amt)
{
amount=amount+amt;
}
public void withdraw(int amt) throws FundsInsufficientException
{
if(amt>amount)
throw new FundsInsufficientException(amount,amt);
else
amount=amount-amt;
}
}
class FundsInsufficientException extends Exception
{
int balance;
int withdraw_amount;
FundsInsufficientException(int bal,int w_amt)
{
balance=bal;
withdraw_amount=w_amt;
}
public String toString()
{
return "Your withdraw amount ("+withdraw_amount+") is less than the balance ("+balance+"). No withdrawal was recorded.";
}
}
【问题讨论】:
-
actionperformed -
刚试了下,同样的错误,谢谢回复
-
这根本不可能。错误是没有覆盖抽象方法actionperformed(ActionEvent)。所以要么你全部重命名,要么错误信息改变了。
-
假设代码完整,我在
ATM类中没有看到方法public void actionPerformed(ActionEvent)。在 buttonOK 侦听器中有 一个actionPerformed,但在 ATM 类中没有。如果不需要JFrame,也许删除implements ActionListener。或者,实现该方法。当然,我可能看不到这种方法。 -
我收到这些错误 Tunaki:ATM 不是抽象的,并且不会覆盖 ActionListener 中的抽象方法 actionPerformed(ActionEvent) 公共类 ATM 扩展 JFrame 实现 ActionListener ^
不是抽象的,不会覆盖ActionListener 中的抽象方法 actionPerformed(ActionEvent) buttonOK.addActionListener(new ActionListener() { ^ 方法不会覆盖或实现来自超类型@Override 的方法