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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als eine Angelegenheit der persönlichen Präferenz, ich bevorzuge die Aktion API
Die wichtigsten Gründe sind
Action
Objekt, dann ist es zu haben, erstellen Sie die menu-item & tool-bar item & popup-MenüpunktActionListener
API bieten im Allgemeinen die Mittel zur Bereitstellung einerAction
sowie (JMenu.add(Action)
,JMenu(Action)
etc)ActionPerformed
Methode einesAction
Klasse dann versuchen Sie, und Blättern Sie durch mehrereif
AussagenWerfen Sie einen Blick auf Wie Sie Aktionen Verwenden
IMHO
Ich würde das
getSource
Methode derActionEvent
stattgetActionCommand
.