ActionPerformed& ActionListener&实施

时间:2017-02-02 20:23:07

标签: java eventhandler implements

在HandlerClass实现ActionListener的位置获取错误"此行有多个标记      - 令牌上的语法错误,删除这些      令牌      - 语法错误,插入'}'完成Block"

我在那里遇到了什么问题?

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class Gui extends JFrame {

private JTextField tf;
private JCheckBox boldbox;
private JCheckBox italicbox;

public Gui() {
    super("Hakuna Matata");
    setLayout(new FlowLayout());
    tf = new JTextField("This is a sentence");
    tf.setFont(new Font("Serif", Font.PLAIN, 14));
    add(tf);

    boldbox = new JCheckBox("bold");
    italicbox = new JCheckBox("italicbox");
    add(boldbox);
    add(italicbox);

    HandlerClass handler = new HandlerClass();
    boldbox.addActionListener(handler);
    italicbox.addActionListener(handler);
}
private HandlerClass implements ActionListener {
    public void ActionPerformed(ActionEvent event) {
        Font font = null;
        if(boldbox.isSelected() && italicbox.isSelected())
            font = new Font("Serif", Font.BOLD + Font.ITALIC, 14);
        else if(boldbox.isSelected())
            font = new Font("Serif", Font.BOLD, 14);
        else if(italicbox.isSelected())
            font = new Font("Serif", Font.ITALIC, 14);
        else
            font = new Font("Serif", Font.PLAIN, 14);

        tf.setFont(font);

    }
}

2 个答案:

答案 0 :(得分:0)

您在实施ActionListener时已关闭但尚未关闭,您需要覆盖的正确方法签名是:

public void actionPerformed(ActionEvent event);

请注意方法名称开头的小写a,根据所有方法名称从小写字符开始的Java约定。

修改

此外,您的HandlerClass应该是内部class,因此应将其声明为:

private class HandlerClass implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent event) {
        //your logic here
    }
}

请注意,我在class名称前添加了HandlerClass关键字。 另外,我建议您将其重命名为更合适的类名,例如Handler而不是HandlerClass

答案 1 :(得分:0)

有两个错误。第一个是JChrist所描述的。为防止这种情况发生,您应该在方法之前使用

@Override

但真正的错误是你在最后错过了一个结束的大括号。你永远不会关闭Gui课程。