TextFieldDemo类型必须实现继承的抽象方法ActionListener吗?

时间:2015-03-12 22:33:19

标签: java

我几乎有这个代码工作。我可以启动GUI,但是,当我按下任何按钮时,我收到以下错误消息:

The type TextFieldDemo must implement the inherited abstract method ActionListener

我在网上浏览过,看不到任何代码问题。有人能帮帮我吗?

谢谢:)

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

 public class TextFieldDemo implements ActionListener{

private JLabel lblName, lblAddress, lblPhone;
private JTextField txtName, txtAddress, txtPhone;
private JButton btnUpper, btnLower, btnExit;    
private JPanel panel;
private JFrame frame;

public static void main(String[] args){
    new TextFieldDemo();
}   

public TextFieldDemo(){
    createForm();
    addFields();
    addButtons();

    frame.add(panel); 
    frame.setVisible(true);
}

public void createForm(){
    frame = new JFrame();
    frame.setTitle("Student Form"); 
    frame.setSize(400,300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    panel = new JPanel();
    panel.setLayout(null);
}


public void addFields(){
    txtName = new JTextField("Fred Bloggs");
    txtName.setBounds(110, 50, 150, 20);
    panel.add(txtName);

    lblAddress = new JLabel ("Address");
    lblAddress.setBounds(10, 70, 100, 20);
    panel.add (lblAddress);

    txtAddress = new JTextField ("Ashley Road");
    txtAddress.setBounds(110, 70, 150, 20);
    panel.add (txtAddress);

    lblPhone = new JLabel ("Phone Number");
    lblPhone.setBounds(10, 90, 100, 20);
    panel.add (lblPhone);

    txtPhone= new JTextField("01202 191 3333");
    txtPhone.setBounds(110, 90, 150, 20);
    panel.add (txtPhone);

    lblName = new JLabel("Student Name");
    lblName.setBounds(10, 50, 100, 20);
    panel.add(lblName);

}

public void addButtons(){
    btnUpper = new JButton ("UpperCase");
    btnUpper.setBounds(50, 200, 100, 20);
    btnUpper.addActionListener(this);
    panel.add (btnUpper);


    btnLower = new JButton ("LowerCase");
    btnLower.setBounds(150, 200, 100, 20);
    btnLower.addActionListener(this);
    panel.add (btnLower);

    btnExit = new JButton ("Exit");
    btnExit.setBounds(250, 200, 100, 20);
    btnExit.addActionListener(this);
    panel.add (btnExit);

}

class UpperCaseHandler implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        txtName.setText(txtName.getText().toUpperCase());
        txtAddress.setText(txtAddress.getText().toUpperCase());
    }


    class LowerCaseHandler implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            txtName.setText(txtName.getText().toLowerCase());
            txtAddress.setText(txtAddress.getText().toLowerCase());
        }

        class ExitHandler implements ActionListener{
            public void actionPerformed(ActionEvent e) {
                int n = JOptionPane.showConfirmDialog(frame, 
                        "Are you sure you want to exit?", 
                        "Exit?", 
                        JOptionPane.YES_NO_OPTION);
                if(n == JOptionPane.YES_OPTION){
                    System.exit(0);
                }
            }
        }


    }
}
 }

2 个答案:

答案 0 :(得分:0)

您说TextFieldDemo实现ActionListener,但它没有actionPerformed()方法,因此实际上并没有实现该接口。

要么实现方法,要么声称它没有实现接口。

我认为它不会像你拥有它那样编译,但是你去了!

答案 1 :(得分:0)

该错误应该让您检查ActionListener的文档以找出缺少的方法。有时eclipse会提示你为缺少的方法添加存根。

文档显示了ActionListener接口有一个要实现的方法,actionPerformed();

http://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionListener.html

奇怪的是,编译器应该在此处抛出错误。