【问题标题】:ActionPerformed & ActionListener & implementingActionPerformed & ActionListener & 实施
【发布时间】:2017-06-20 01:56:07
【问题描述】:

在 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);

    }
}

【问题讨论】:

    标签: java eventhandler implements


    【解决方案1】:

    有两个错误。第一个是 JChrist 所描述的。为了防止这种情况,你应该有

    @Override
    在方法之前。

    但真正的错误是您在末尾缺少一个右大括号。你永远不会关闭 Gui 类。

    【讨论】:

    • 我有一个支架。在我在这里发布问题之前,我确保我没有遗漏分号。不想把你的时间浪费在一个菜鸟的错误上,但我删除了分号,因为我收到错误说摆脱它,所以尽管我不明白为什么我还是这样做了,因为我确信它应该在那里。
    【解决方案2】:

    您在实现ActionListener 时已经接近但未完成,您需要覆盖的正确方法签名是:

    public void actionPerformed(ActionEvent event);
    

    请注意方法名称开头的小写a,按照Java 约定,所有方法名称都以小写字符开头。

    编辑

    另外,你的HandlerClass 应该是一个内部的class,所以它应该被声明为:

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

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

    【讨论】:

    • 为什么用分号关闭标题?在那之后有一个身体。
    • 他指的是ActionListener接口,不声明方法体,只声明头部。
    • 是的,你是对的,你的实现中有一个主体。我关闭了它,因为我指定了它在接口中的方式,它没有实现:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2012-09-21
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多