メニューには、ドロップダウン メニューとポップアップ メニューの 2 種類があります。この章では、ドロップダウン メニューのプログラミング方法についてのみ説明します。メニューは、インターフェイスに常に表示されるという点で、JComboBox や JCheckBox とは異なります。このメニューは、一度に 1 つの項目のみを選択できるという点で JComboBox に似ています。
ドロップダウン メニューまたはポップアップ メニューでオプションを選択すると、ActionEvent イベントが生成されます。イベントはそのオプションのモニターに送信され、イベントの意味がモニターによって解釈されます。
メニュー バー、メニュー、およびメニュー項目
ドロップダウン メニューは、メニュー バーに表示される名前によって視覚的に表されます。メニュー バー (JMenuBar) は、通常、JFrame の上部に表示されます。複数のドロップダウン メニュー。ドロップダウン メニューをアクティブにするには 2 つの方法があります。 1 つは、マウス ボタンを押したままにし、マウスを放して選択を完了するまでマウスを移動することです。もう 1 つの方法は、カーソルがメニュー バーのメニュー名の上にあるときにマウスをクリックすることです。この場合、メニューが展開され、メニュー項目が強調表示されます。
メニュー バーには複数のメニュー (JMenu) を含めることができ、各メニューには多数のメニュー項目 (JMenuItem) を含めることができます。例えば、Eclipse環境のメニューバーには、File、Edit、Source、Refactorなどのメニューがあり、それぞれのメニューには多数のメニュー項目があります。たとえば、[ファイル] メニューには、[新規作成]、[ファイルを開く]、[閉じる]、[すべて閉じる] などのメニュー項目があります。
ウィンドウにメニューを追加する方法は、まずメニュー バー オブジェクトを作成し、次にいくつかのメニュー オブジェクトを作成し、これらのメニュー オブジェクトをメニュー バーに配置し、必要に応じて各メニュー オブジェクトにメニュー項目を追加します。
メニュー内のメニュー項目を完全なメニューにすることもできます。メニュー項目は別の完全なメニューになる可能性があるため、階層的なメニュー構造を構築できます。
1. メニュー バー
クラス JMenuBar のインスタンスはメニュー バーです。たとえば、次のコードはメニュー バー オブジェクト menubar を作成します。
JMenuBar menubar = new JMenuBar();
メニュー バーをウィンドウに追加するには、JFrame クラスの setJMenuBar() メソッドを使用する必要があります。たとえば、コード:
setJMenuBar(menubar);
クラス JMenuBar の一般的なメソッドは次のとおりです:
add(JMenu m): メニュー m をメニュー バーに追加します。
countJMenus(): メニューバーのメニュー項目の数を取得します。
getJMenu(int p): メニューバーのメニューを取得します。
remove(JMenu m): メニューバーのメニュー m を削除します。
2. メニュー
JMenu クラスによって作成されるオブジェクトがメニューです。 JMenu クラスの一般的に使用されるメソッドは次のとおりです:
JMenu(): 空のタイトルを持つメニューを作成します。
JMenu(String s): s というタイトルのメニューを作成します。
add(JMenuItem item): パラメーター item で指定されたメニュー オプションをメニューに追加します。
add(JMenu menu): パラメータメニューで指定されたメニューをメニューに追加します。メニューに埋め込みサブメニューを実装します。
addSeparator(): メニューオプションの間に区切り線を描きます。
getItem(int n): 指定されたインデックスにあるメニュー項目を取得します。
getItemCount(): メニュー項目の数を取得します。
insert(JMenuItem item, int n): メニュー位置 n にメニュー項目を挿入します。
remove(int n): メニュー位置 n にあるメニュー項目を削除します。
removeAll(): メニューのすべてのメニュー項目を削除します。
3. メニュー項目
JMenuItem クラスのインスタンスはメニュー項目です。クラス JMenuItem の一般的なメソッドは次のとおりです:
JMenuItem(): 無題のメニュー項目を構築します。
JMenuItem(String s): タイトル付きのメニュー項目を構築します。
setEnabled(boolean b): 現在の単一項目を選択できるかどうかを設定します。
isEnabled(): 現在のメニュー項目がユーザーによって選択可能かどうかを返します。
getLabel(): メニュー項目の名前を取得します。
setLabel(): メニューオプションの名前を設定します。
addActionListener(ActionListener e): メニュー項目のモニターを設定します。モニターは、メニューがクリックされたときにアクション イベントを受け取ります。
4. メニュー イベントの処理
メニューのイベント ソースは、マウスでメニュー項目をクリックすることです。このイベントを処理するインターフェースはActionListener、実装するインターフェースメソッドはactionPerformed(ActionEvent e)、イベントソースを取得するメソッドはgetSource()です。
【例】ウィンドウにはメニューバーがあります。ボタンが開いているウィンドウの状態では、ボタンをクリックするとウィンドウが開き、2 つのメニューがあり、各メニューには 3 つのメニュー項目があります。メニュー項目が選択されると、メニュー項目監視メソッドは、対応するメニュー項目が選択されたことをテキスト ボックスに表示します。
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. Embed submenu
はメニューを作成し、複数のメニュー項目を作成します。そのうちの 1 つはメニュー (他のメニュー項目を含む) であり、メニューのネストを構成します。たとえば、上記のプログラムの関連コードを次のように変更します。
Menu menu1,menu2,item4; MenuItem item3,item5,item6,item41,item42;
次のコードを挿入して item41 および item42 メニュー項目を作成し、それらを item4 メニューに追加します。
item41= new MenuItem(“东方红”); item42 = new MenuItem(“牡丹”); item4.add(item41); item4.add(item42);
item4 メニューをクリックすると、さらに 2 つメニュー項目が開き、選択できます。
6. メニューに終了項目を追加します。 新しいメニュー項目を追加し、メニュー項目がクリックされたときに Java 実行環境を終了するには、対応する監視メソッドの System.exit() メソッドを使用します。 。たとえば、次の回路図コード:
… 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中文网!