Слушатель действия элемента JMenu не обнаружен

Я создаю базу данных библиотеки для школьного проекта, и у меня небольшие проблемы с меню. Так что основная проблема в том, что в методе Action Listener, когда я пишу

(e.getSource()==m1Frame1)

моя программа не определяет пункт меню и выдает ошибку. Я просмотрел несколько руководств и т. Д. В Интернете, но не могу найти способ исправить это и сделать так, чтобы при нажатии на определенный элемент происходило определенное действие. Любая помощь/решение по этому вопросу будет высоко оценена.

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.*;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JOptionPane;
import java.awt.event.*;
import javax.swing.Icon;
import java.awt.*;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import java.awt.Color;

public class m1 extends JFrame {
    JPanel pane = new JPanel();

    JFrame a = new JFrame("Main Frame");
    JFrame b = new JFrame("Sub Frame");

    JButton checkOutButton = new JButton("check");
    JButton returnButton = new JButton("return");

    JMenu mb2 = new JMenu("Books");
    // mb2.setForeground(Color.white);
    JMenu open = new JMenu("Students");
// open.setForeground(Color.white);

    public m1() {

        JMenuBar mb;
        mb = new JMenuBar() {
            public void paintComponent(Graphics g) {
                g.drawImage(Toolkit.getDefaultToolkit().getImage("G:"), 0, 0, this);
            }
        };

        setSize(400, 400);
        setBackground(Color.BLACK);
        setTitle("Screen 2");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        mb.add(open);

        JMenuItem m1Frame1 = new JMenuItem("Create");
        JMenuItem m1Frame2 = new JMenuItem("Delete");
        JMenu m1Frame3 = new JMenu("Look-Up");
        JMenuItem m1Frame4 = new JMenuItem("Check Fine");
        JMenuItem m1Frame5 = new JMenuItem("Check Borrowed Books");
        JMenuItem subM1 = new JMenuItem("Name");
        JMenuItem subM2 = new JMenuItem("Student #");

        open.add(m1Frame1);
        open.add(m1Frame2);
        open.add(m1Frame3);
        open.add(m1Frame4);
        open.add(m1Frame5);

        m1Frame3.add(subM1);
        m1Frame3.add(subM2);

        mb.add(mb2);

        JMenuItem m2Frame1 = new JMenuItem("Create");
        JMenuItem m2Frame2 = new JMenuItem("Delete");
        JMenu m2Frame3 = new JMenu("Look-Up");
        JMenuItem subB1 = new JMenuItem("Title");
        JMenuItem subB2 = new JMenuItem("Author");
        JMenuItem subB3 = new JMenuItem("Category");
        JMenuItem subB4 = new JMenuItem("ISBN");
        JMenuItem m2Frame4 = new JMenuItem("Compare Star Rating");
        JMenuItem m2Frame5 = new JMenuItem("Check If Checked Out");
        JMenuItem m2Frame6 = new JMenuItem("Lost Book");

        mb2.add(m2Frame1);
        mb2.add(m2Frame2);
        mb2.add(m2Frame3);
        mb2.add(m2Frame4);
        mb2.add(m2Frame5);
        mb2.add(m2Frame6);

        m2Frame3.add(subB1);
        m2Frame3.add(subB2);
        m2Frame3.add(subB3);
        m2Frame3.add(subB4);

        a.setJMenuBar(mb);

        a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        a.setSize(1280, 720);
        a.setVisible(true);
        b.setSize(600, 400);

        m handler = new m();

        pane.add(checkOutButton);
        pane.add(returnButton);
        add(pane);
        checkOutButton.setVisible(false);
        returnButton.setVisible(false);
        checkOutButton.setBounds(60, 440, 220, 30);
        returnButton.setBounds(60, 404, 100, 50);
        checkOutButton.addActionListener(handler);
        returnButton.addActionListener(handler);
    }

    public class m implements ActionListener, ItemListener {

        public void actionPerformed(ActionEvent e) {
             (e.getSource() == m1Frame1) {
                a.setVisible(false);
                setVisible(true);
                checkOutButton.setVisible(true);
                returnButton.setVisible(true);
            }
        }

        public void itemStateChanged(ItemEvent e) {
        }
    }

    public static void main(String[] args) {
        m1 aa = new m1();
    }
}

person user2229592    schedule 31.03.2013    source источник


Ответы (1)


Хорошо, есть несколько проблем с вашим кодом, но я рассмотрю две особенности, которые отвечают на ваш вопрос:

1) Вы не добавляете свой прослушиватель действий ни к одному из ваших элементов меню в своем коде. Когда я добавил ваш обработчик в MenuItems, используя addActionListener(handler); Это начало срабатывать.

2) Вы добавляете обработчик в качестве actionListener для двух невидимых кнопок (и у вас есть другие проблемы с макетом)

person Kylar    schedule 31.03.2013
comment
Извините за то, что раньше у меня были слушатели действий, я просто забыл повторно добавить их в MenuItems. Я также знаю о невидимых кнопках. Но проблема в том, что когда я объявляю свои элементы JMenu на уровне класса и пытаюсь добавить к ним прослушиватели действий, по какой-то причине я получаю сообщение об ошибке. - person user2229592; 31.03.2013
comment
Подождите, вы все еще видите ошибку? Какую ошибку вы видите? - person Kylar; 03.04.2013