Es gibt zwei Arten von Menüs: Dropdown-Menüs und Popup-Menüs. In diesem Kapitel werden nur Programmiermethoden für Dropdown-Menüs erläutert. Menüs unterscheiden sich von JComboBox und JCheckBox dadurch, dass sie immer in der Benutzeroberfläche sichtbar sind. Das Menü ähnelt der JComboBox darin, dass jeweils nur ein Element ausgewählt werden kann.
Die Auswahl einer Option im Dropdown-Menü oder Popup-Menü generiert ein ActionEvent-Ereignis. Das Ereignis wird für diese Option an den Monitor gesendet und die Bedeutung des Ereignisses wird vom Monitor interpretiert.
Menüleisten, Menüs und Menüelemente
Das Dropdown-Menü wird visuell durch den Namen dargestellt, der in der Menüleiste erscheint. Die Menüleiste (JMenuBar) erscheint normalerweise oben im JFrame A In der Menüleiste werden mehrere Dropdown-Menüs angezeigt. Der Name des Menüs. Es gibt zwei Möglichkeiten, Dropdown-Menüs zu aktivieren. Eine besteht darin, die Maustaste zu drücken, gedrückt zu halten und die Maus zu bewegen, bis Sie die Maustaste loslassen, um die Auswahl abzuschließen. Das markierte Menüelement ist das ausgewählte. Eine andere Möglichkeit besteht darin, mit der Maus zu klicken, wenn sich der Cursor über dem Menünamen in der Menüleiste befindet. In diesem Fall wird das Menü erweitert und der Menüpunkt hervorgehoben.
Eine Menüleiste kann mehrere Menüs (JMenu) enthalten, und jedes Menü kann viele Menüelemente (JMenuItem) enthalten. Beispielsweise umfasst die Menüleiste der Eclipse-Umgebung die Menüs „Datei“, „Bearbeiten“, „Quelle“, „Refactor“ und andere, und jedes Menü verfügt über viele Menüelemente. Das Menü „Datei“ verfügt beispielsweise über Menüelemente wie „Neu“, „Datei öffnen“, „Schließen“ und „Alle schließen“.
Um einem Fenster ein Menü hinzuzufügen, erstellen Sie zunächst ein Menüleistenobjekt, dann mehrere Menüobjekte, platzieren diese Menüobjekte in der Menüleiste und fügen dann jedem Menüobjekt nach Bedarf Menüelemente hinzu .
Menüpunkte innerhalb eines Menüs können auch ein komplettes Menü sein. Da ein Menüpunkt ein weiteres vollständiges Menü sein kann, kann eine hierarchische Menüstruktur aufgebaut werden.
1. Menüleiste
Eine Instanz der JMenuBar-Klasse ist die Menüleiste. Mit dem folgenden Code wird beispielsweise ein Menüleistenobjekt „Menüleiste“ erstellt:
JMenuBar menubar = new JMenuBar();
Um einem Fenster eine Menüleiste hinzuzufügen, müssen Sie die Methode setJMenuBar() in der JFrame-Klasse verwenden. Beispiel: Code:
setJMenuBar(menubar);
Gängige Methoden der Klasse JMenuBar sind:
add(JMenu m): Menü m zur Menüleiste hinzufügen.
countJMenus(): Ermittelt die Anzahl der Menüelemente in der Menüleiste.
getJMenu(int p): Ruft das Menü in der Menüleiste ab.
remove(JMenu m): Menü m in der Menüleiste löschen.
2. Menü
Das von der JMenu-Klasse erstellte Objekt ist das Menü. Häufig verwendete Methoden der JMenu-Klasse sind wie folgt:
JMenu(): Erstellen Sie ein Menü mit einem leeren Titel.
JMenu(String s): Erstellen Sie ein Menü mit dem Titel s.
add(JMenuItem item): Fügen Sie die durch das Parameterelement angegebene Menüoption zum Menü hinzu.
add(JMenu-Menü): Fügen Sie das durch das Parametermenü angegebene Menü zum Menü hinzu. Implementieren Sie das Einbetten von Untermenüs in Menüs.
addSeparator(): Zeichne eine Trennlinie zwischen Menüoptionen.
getItem(int n): Ruft den Menüpunkt am angegebenen Index ab.
getItemCount(): Ermittelt die Anzahl der Menüelemente.
insert(JMenuItem item,int n): Menüelement an Menüposition n einfügen.
remove(int n): Menüelement an Menüposition n löschen
removeAll (): Alle Menüpunkte des Menüs entfernen.
3. Menüelemente
Instanzen der JMenuItem-Klasse sind Menüelemente. Die allgemeinen Methoden der Klasse JMenuItem sind wie folgt:
JMenuItem(): Konstruiert einen unbenannten Menüpunkt.
JMenuItem(String s): Konstruiert einen betitelten Menüpunkt.
setEnabled(boolean b): Legt fest, ob das aktuelle Einzelelement ausgewählt werden kann.
isEnabled(): Gibt zurück, ob der aktuelle Menüpunkt vom Benutzer ausgewählt werden kann.
getLabel(): Ruft den Namen des Menüpunkts ab.
setLabel(): Legt den Namen der Menüoption fest.
addActionListener(ActionListener e): Stellen Sie den Monitor für den Menüpunkt ein. Der Monitor akzeptiert Aktionsereignisse, wenn auf ein Menü geklickt wird.
4. Menüereignisse verarbeiten
Die Ereignisquelle des Menüs ist das Klicken auf einen Menüpunkt mit der Maus. Die Schnittstelle zur Verarbeitung dieses Ereignisses ist ActionListener, die zu implementierende Schnittstellenmethode ist actionPerformed(ActionEvent e) und die Methode zum Abrufen der Ereignisquelle ist getSource()
[Beispiel] Implementierungsmethode einer kleinen Anwendung Zeigt an, dass das Fenster über eine Menüleiste verfügt. Wenn sich die Schaltfläche im geöffneten Fensterzustand befindet, wird durch Klicken auf die Schaltfläche ein Fenster geöffnet. Das Fenster verfügt über eine Menüleiste mit zwei Menüs und jedes Menü verfügt über drei Menüelemente. Wenn ein Menüelement ausgewählt wird, zeigt die Menüelementüberwachungsmethode die Wörter an, dass das entsprechende Menüelement im Textfeld ausgewählt ist.
import java.applet.* import javax.swing.*; import java.awt.*; import java.awt.event.*; class MenuWindow extends JFrame implements ActionListener{ public static JtextField text; private void addItem(JMenu Menu,String menuName,ActionListener listener){ JMenuItem anItem = new JMenuItem(menuName); anItem.setActionCommand(menuName); anItem.addActionListener(listener); Menu.add(anItem); } public MenuWindow(String s,int w,int h){ setTitle(s); Container con = this.getContentPane(); con.setLayout(new BorderLayout()); this.setLocation(100,100); this.setSize(w,h); JMenu menu1 = new JMenu("体育"); addItem(menu1," 跑步",this); addItem(menu1," 跳绳",this); addItem(menu1,"打球",this); JMenu menu2 = JMenu("娱乐"); addItem(menu2,"唱歌",this); addItem(menu2,"跳舞",this); addItem(menu2,"游戏",this); JMenuBar menubar = new JMenuBar(); text = new JTextField(); menubar.add(menu1); menubar.add(menu2); setJMenuBar(MenuBar); con.add(text,BorderLayout.NORTH); } public void actionPerformed(ActionEvent e){ text.setText(e.getActionCommand()+"菜单项被选中!"); } } public class Example6_5 extends Applet implements ActionListener{ MenuWindow window; JButton button; boolean bflg; public void init(){ button = new JButton("打开我的体育娱乐之窗");bflg =true; window = new MenuWindow("体育娱乐之窗",100,100); button.addActionListener(this); add(button); } public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ if(bflg){ window.setVisible(true); bflg = false; button.setLabel("关闭我的体育娱乐之窗"); } else{ window.setVisible(false); bflg = true; button.setLabel("打开我的体育娱乐之窗"); } } } }
5. Untermenü einbetten
erstellt ein Menü und erstellt mehrere Menüelemente, von denen eines ein Menüelement ist ein anderes Menü (das andere Menüelemente enthält), was eine Menüverschachtelung darstellt. Ändern Sie beispielsweise den relevanten Code im obigen Programm wie folgt:
Menu menu1,menu2,item4; MenuItem item3,item5,item6,item41,item42;
Fügen Sie den folgenden Code ein, um die Menüpunkte item41 und item42 zu erstellen, und fügen Sie sie dem Menü item4 hinzu:
item41= new MenuItem(“东方红”); item42 = new MenuItem(“牡丹”); item4.add(item41); item4.add(item42);
Wenn Sie auf das Menüpunkt4 klicken, werden zwei weitere Menüpunkte zur Auswahl geöffnet.
6. Fügen Sie ein Exit-Element zum Menü hinzu.
Fügen Sie ein neues Menüelement hinzu und fügen Sie die Überwachung zum Menüelement hinzu. Klicken Sie in der entsprechenden Überwachungsmethode auf das Menü „Exit“. Java-Laufzeitumgebung, wenn das Element ausgewählt ist. Zum Beispiel der folgende Code:
… item7 = new MenuItem(“退出”); item7.addActionListener(this); … public void actionPerformed(ActionEvent e){ if(e.getSource()==item7){ System.exit(0); } }
7.设置菜单项的快捷键
用MenuShortcut类为菜单项设置快捷键。构造方法是MenuShortcut(int key)。其中key可以取值KeyEvent.VK_A至KenEvent.VK_Z,也可以取 ‘a'到 ‘z'键码值。菜单项使用setShortcut(MenuShortcut k)方法来设置快捷键。例如,以下代码设置字母e为快捷键。
class Herwindow extends Frame implements ActionListener{ MenuBar menbar; Menu menu; MenuItem item; MenuShortcut shortcut = new MenuShortcut(KeyEvent.VK_E); … item.setShortcut(shortcut); … }
选择框菜单项
菜单也可以包含具有持久的选择状态的选项,这种特殊的菜单可由JCheckBoxMenuItem类来定义。JCheckBoxMenuItem对象像选择框一样,能表示一个选项被选中与否,也可以作为一个菜单项加到下拉菜单中。点击JCheckBoxMenuItem菜单时,就会在它的左边出现打勾符号或清除打勾符号。例如,在例6.5程序的类MenuWindow中,将代码
addItem(menu1,“跑步”,this);addItem(menu1,”跳绳”,this);
改写成以下代码,就将两个普通菜单项“跑步“和“跳绳”改成两个选择框菜单项:
JCheckBoxMenuItem item1 = new JCheckBoxMenuItem(“跑步”); JCheckBoxMenuItem item2 = new JCheckBoxMenuItem(“跳绳”); item1.setActionCommand(“跑步”); item1.addActionListener(this); menu1.add(item1); item2.setActionCommand(“跳绳”); item2.addActionListener(this); menu1.add(item2);
更多使用Java编写图形化的菜单的教程相关文章请关注PHP中文网!