Java JMenuItem ActionListener

Ich brauche etwas Hilfe mit meinem ActionListener auf meine JMenuBar.

Gibt es keine Fehler; aber jedes mal, wenn ich auf ein JMenuItem, es löst alle Maßnahmen im Zusammenhang mit dem JMenuItem. Meine Frage ist: mache ich es richtig in meinem ActionListener-code? Ich bin mir auch nicht sicher über meine ActionListener-Klasse. Ich versuche, mich zu trennen, mein ActionListener von my Button-Logik.

Wenn jemand irgendwelche Ideen auf, was ich vielleicht falsch mache, bitte zeigen Sie es heraus.

Hier ist mein code:

package MenuBar;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class SimpleMenuBar{
    private static final LayoutManager grid = new GridLayout(0, 1);
    public JMenuBar MenuBar;
    public JMenu MenuFile, MenuEdit, MenuOption;
    public JMenuItem ItemNew, ItemOpen, ItemSave, ItemExit, ItemCopy, ItemCut, ItemPaste;
    ButtonGroup direction;
    JRadioButtonMenuItem forwardradio, backwardradio;
    JCheckBoxMenuItem CheckCase;
    String input = null;
    public void Design()
    {
        JFrame frame = new JFrame("Simple Menubar");
        frame.setSize(320, 320);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        MenuBar = new JMenuBar();
        frame.setJMenuBar(MenuBar);
        MenuBar.setLayout(grid);

        //Menus
        MenuFile = new JMenu("File");
        MenuFile.setMnemonic(KeyEvent.VK_F);
        MenuBar.add(MenuFile);

        //sub Menus
        ItemNew = new JMenuItem("New", KeyEvent.VK_N);
        MenuFile.add(ItemNew);
        ItemNew.setActionCommand("New");
        ItemNew.addActionListener(new MenuBarMethod());

        ItemOpen = new JMenuItem("Open", KeyEvent.VK_O);
        MenuFile.add(ItemOpen);
        ItemOpen.setActionCommand("Open");
        ItemNew.addActionListener(new MenuBarMethod());
        MenuFile.addSeparator();


        ItemSave = new JMenuItem("Save", KeyEvent.VK_S);
        MenuFile.add(ItemSave);
        MenuFile.addSeparator();

        ItemExit = new JMenuItem("Exit", KeyEvent.VK_X);
        MenuFile.add(ItemExit);

        MenuEdit = new JMenu("Edit");
        MenuFile.setMnemonic(KeyEvent.VK_E);
        MenuBar.add(MenuEdit);

        ItemCopy = new JMenuItem("Copy", KeyEvent.VK_C);
        KeyStroke ctrlCKeyStroke = KeyStroke.getKeyStroke("control C");
        ItemCopy.setAccelerator(ctrlCKeyStroke);
        MenuEdit.add(ItemCopy);

        ItemCut = new JMenuItem("Cut", KeyEvent.VK_V);
        KeyStroke ctrlVKeyStroke = KeyStroke.getKeyStroke("control V");
        ItemCut.setAccelerator(ctrlVKeyStroke);
        MenuEdit.add(ItemCut);

        ItemPaste = new JMenuItem("Paste", KeyEvent.VK_Y);
        KeyStroke ctrlYKeyStroke = KeyStroke.getKeyStroke("control Y");
        ItemPaste.setAccelerator(ctrlYKeyStroke);
        ItemPaste.setEnabled(false);
        MenuEdit.add(ItemPaste);
        MenuEdit.addSeparator();

        MenuOption = new JMenu("Option");
        Icon atIcon = new ImageIcon("option.png");
        MenuOption.setIcon(atIcon);
        MenuOption.setMnemonic(KeyEvent.VK_O);

        direction = new ButtonGroup();
        forwardradio = new JRadioButtonMenuItem("Forward Me", true);
        forwardradio.setMnemonic(KeyEvent.VK_F);
        MenuOption.add(forwardradio);
        direction.add(forwardradio);
        MenuEdit.add(MenuOption);

        backwardradio = new JRadioButtonMenuItem("Backward Me");
        backwardradio.setMnemonic(KeyEvent.VK_B);
        MenuOption.add(backwardradio);
        direction.add(backwardradio);

        MenuOption.addSeparator();

        CheckCase = new JCheckBoxMenuItem("Case Sensitive");
        MenuOption.add(CheckCase);
        direction.add(CheckCase);
        MenuEdit.add(MenuOption);

    }
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable(){
            public void run()
            {
                SimpleMenuBar MyMenu = new SimpleMenuBar();
                MyMenu.Design();

            }
        });
    }
}

Es ist eine Menge code für nur eine Menüleiste. Ich habe noch nicht vollständig implementiert die ActionListener. Für Testzwecke habe ich nur implementiert, die es für zwei Elemente: ItemNew und ItemOpen. Leider, jedes mal, wenn ich auf die ItemNew Menüpunkt, löst die Aktionen der beiden ItemNew und ItemOpen.

Hier ist der code für meine Aktion Hörer:

package MenuBar;
import java.awt.event.*;

import javax.swing.JOptionPane;
public class MenuBarMethod implements ActionListener{
    public void actionPerformed(ActionEvent e)
    {
        if("New".equals(e.getActionCommand())){
            JOptionPane.showMessageDialog(null, "Selected Item: " + e.getActionCommand());
        }
        if("Open".equals(e.getActionCommand())){
            JOptionPane.showMessageDialog(null, "Selected Item: " + e.getActionCommand());
        }
    }

}
  • Nur eine Frage des Stils sollten Sie Kamel-Fall Variablen und Methoden (menuFile, itemSave, itemOpen, ). Klassen sind " Pascal case (MenuBarMethod).
  • ich bin Neuling auf java, jedenfalls danke für die Namensgebung.
  • Also, wenn Sie Öffnen oder Neu macht eine Meldung im popup? Eine andere Sache, da Ihr MenuBarMethod action-listener verarbeitet alle Aktionen, die (zumindest diese beiden) fertig nicht brauchen, erstellen Sie eine neue Instanz für jedes Menüelement. Erstellen Sie eine Instanz, und fügen Sie es zu den menuitems. ActionListener l = new MenubarMethod(); openMenuItem.addActionListerner(l); newMenuItem.addActionListener(l);
  • ja, popup Karte, übrigens vielen Dank, es funktioniert jetzt, ich habe versucht deinen code, ich sehe meine Fehler, ich brauche nur zu instanziieren der Klasse actionlistener einmal, und rufen Sie es an meiner Menüs. Dank
  • es ist besser, wenn Sie ein Bild von dem JMenu nach der Ausführung Ihres Codes
InformationsquelleAutor Zyrax | 2012-08-16
Schreibe einen Kommentar