2017-02-02 18 views
-2

Получение ошибки на линии, где HandlerClass реализует ActionListener говоря «Множественные маркеры на этой линии - синтаксической ошибки на лексемы, удалять эти лексем - ошибка синтаксиса, вставка„}“для завершения блока»ActionPerformed & ActionListener и реализации

У меня там что-то не так?

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

    } 
} 

ответ

0

Вы были близки, но от в реализации ActionListener, правильный метод подписи, что вам нужно переопределить это:

public void actionPerformed(ActionEvent event); 

Пожалуйста, обратите внимание на нижний регистр a в начале имени метода, в соответствии с Java-соглашение для всех имен методов начинается с символа нижнего регистра.

EDIT

Кроме того, ваш HandlerClass должен быть внутренним class, поэтому она должна быть объявлена ​​как:

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

Пожалуйста, обратите внимание, что я добавил class ключевое слово перед именем HandlerClass. Кроме того, я предлагаю вам переименовать его в более подходящее имя класса, например Handler, а не HandlerClass.

+0

Почему вы закрываете заголовок точкой с запятой? После этого есть тело. –

+1

Он имеет в виду интерфейс ActionListener, который не объявляет тело метода, просто заголовок. –

+0

Да, вы правы, в вашей реализации есть тело. Я закрыл его, потому что я указал, как он находится в интерфейсе, который не имеет реализации :) – JChrist

0

Имеются две ошибки. Первое, как описывает Дж. Крист. Чтобы этого не произошло, перед методом следует иметь

@Override
.

Но реальная ошибка заключается в том, что в конце отсутствует закрывающая фигурная скобка. Вы никогда не закрываете класс Gui.

+0

У меня была скобка. Прежде чем я разместил здесь вопрос, я убедился, что я не пропущу точку с запятой. Не хотел тратить свое время на новичковую ошибку, но я удалил точку с запятой, потому что я получал ошибку, говоря, что избавился от нее, поэтому я сделал, несмотря на то, что не понял, почему «я уверен, что она должна быть там». –