JMenuItem проблема. У меня пять Один из них компилируется без проблем. Другие идентичны, но они отказываются компилировать - PullRequest
2 голосов
/ 12 июня 2011

по какой-то причине я не могу скомпилировать это в Eclipse. Элемент menu «quit» работает, а другие элементы menu не работают. Почему это так?

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

public class GUI{

private JFrame frame;

public GUI(){
    makeFrame();
}

//This method makes the overall GUI and adds panels, labels,
//buttons, and everything else to the GUI.
public void makeFrame(){
    frame = new JFrame("Tower Defense");
    Container contentPane = frame.getContentPane();

    makeMenus();

    JButton shootButton = new JButton("Shoot");
    contentPane.add(shootButton);

    frame.pack();
    frame.setVisible(true);

}

//This method makes the menu and all of the items contained
//in the menu which is then called by the makeFrame() method.
//I also add the menuItem's various ActionLiteners here.
public void makeMenus(){
    JMenuBar menubar = new JMenuBar();
    frame.setJMenuBar(menubar);

    JMenu fileMenu = new JMenu("File");
    JMenu actionsMenu = new JMenu("Actions");
    JMenu buildMenu = new JMenu("Build");

    menubar.add(fileMenu);
    menubar.add(actionsMenu);
    menubar.add(buildMenu);

    JMenuItem sellItem = new JMenuItem("Sell");
    JMenuItem quitItem = new JMenuItem("Quit");

    JMenuItem turretsItem = new JMenuItem("Turrets");
    JMenuItem minesItem = new JMenuItem("Mines");
    JMenuItem workersItem = new JMenuItem("Workers");

    quitItem.addActionListener(new QuitActionListener());
    sellItem.addActionListener(new SellActionListener());
    turretsItem.addActionListener(new TurretsActionListener());
    minesItem.addActionListener(new MinesActionListener());
    workersItem.addActionListener(new WorkersActionListener());

    fileMenu.add(quitItem);
    actionsMenu.add(sellItem);
    buildMenu.add(turretsItem);
    buildMenu.add(minesItem);
    buildMenu.add(workersItem);
}

//Main method. It creates a new GUI.
public static void main(String args []){
    GUI gui = new GUI();
}

class QuitActionListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        System.exit(0);
    }
}

class SellActionListener{

    public void actionPerformed(ActionEvent e){
        System.exit(0);
    }
}

class TurretsActionListener{

    public void actionPerformed(ActionEvent e){
        System.exit(0);
    }
}

class MinesActionListener{

    public void actionPerformed(ActionEvent e){
        System.exit(0);
    }
}

class WorkersActionListener{

    public void actionPerformed(ActionEvent e){
        System.exit(0);
    }
}

class ShootActionListener{
    public void actionPerformed(ActionEvent e){
        System.exit(0);
    }
}

}

1 Ответ

6 голосов
/ 12 июня 2011

Он не компилируется, потому что слушатели действий (например, SellActionListener), которые вы предоставляете (все, кроме действия выхода), не реализуют ActionListener.Метод addActionListener ожидает, что объект, который реализует ActionListener.

This:

class SellActionListener{

    public void actionPerformed(ActionEvent e){
        System.exit(0);
    }
}

, должен стать таким:

class SellActionListener implements ActionListener{

    public void actionPerformed(ActionEvent e){
        System.exit(0);
    }
}

(вместе с другимслушатели действия)

Для потомков

Подобные ошибки обычно можно выяснить из отзывов компилятора.Когда Eclipse сообщает, что были ошибки компиляции, вы должны увидеть подробности ошибки.Я думаю, что это будет что-то вроде "класс SellActionListener не реализует интерфейс ActionListener" (или что-то в этом роде).Если вы отправите в Google это сообщение об ошибке, вы сможете быстрее найти ответ, чем тот, кто ждет ответа на ваш конкретный вопрос.

...