ポップアップメニュー
- 目的
ここでは、マウスの右クリックでポップアップメニューを表示し、メニュー項目を選択すると項目名を表示するアプレットを作成します。
ポップアップメニューは、複数のメニュー項目を表示し、マウスで選択された項目に対応する処理を実行する機能です。メニューバーはウインドウの先頭にメニューバーを表示し、マウスのクリックで対応するメニュー項目を表示する機能ですが、アプレットでは、メニューバーを利用することは出来ません。
- メニュー項目の生成
- ポップアップメニューの生成
awtのコンポーネントにpopupMenuがあります。これをアプレットのウインドウに配置します。これで、
PopupMenu popupMenu1 = new PopupMenu();
がアプレットの先頭の宣言に追加されますが、メニューの項目などの追加はすべて、ソースに書き込む必要があります。
- メニュー項目の生成
メニュー項目は、MenuItemクラスで宣言します。ここでは二つの項目を指定します。
MenuItem puItem1,puItem2;
各MenuItemのインスタンスを生成し、ActionListenerを追加します。
puItem1=new MenuItem("puItem1");
puItem1.addActionListener(this);
"puItem1"が、メニュー項目として表示されます。.addActionListener()でこの項目をイベントとして登録します。最後に
add(popupMenu1);
で、アプレットにpopupMenu1を追加します。
リスナを利用するため、アプレットの宣言にActionListenerをimplementsする必要があります。
public class Applet1 extends Applet implements ActionListener
- ポップアップメニューの表示
マウスの右ボタンがクリックされたとき、ポップアップメニューを表示します。
popupMenu1.show(this,e.getX(),e.getY());
eはMouseEventで、ポップアップメニューの位置を指定します。
- プロジェクト
- レイアウト
アプレットを生成し、「設計」でlayoutをnullとし、awtのコンポーネントからpopupmenuを配置します。配置しても、何も表示されませんが、左下の構成メニューにpopuMenu1が追加されます。次に、ラベルを二つ追加します。一方のラベルは、「画面で右クリックしてください」を表示します。
他のラベルは、選択された項目名を表示するのに利用します。
- 主要変数
PopupMenu popupMenu1 = new PopupMenu("popUpMenu"); //ポップアップクラスを参照します
MenuItem puItem1,puItem2; //メニュー項目を記録します
- メソッド
- implements
アプレットの宣言にリスナをimplementsします。マウスも利用しますから
public class Applet1 extends Applet implements ActionListener,MouseListener
とimplementsを追加します。
- メニューのインスタンスとリスナの指定
ここでは、この処理を genPopUpMenu() メソッドで行います。init() に、このメソッドの呼び出しを追加します。
- genPopUpMenu()
ポップアップメニューを作成します。.addSeparator();はメニューの項目の間に区切り線を表示する指定です。
public void genPopUpMenu(){
puItem1=new MenuItem("puItem1");
puItem1.addActionListener(this);
puItem2=new MenuItem("puItem2");
puItem2.addActionListener(this);
popupMenu1.add(puItem1);
popupMenu1.addSeparator();
popupMenu1.add(puItem2);
add(popupMenu1);
}
- mousePressed(MouseEvent e):ポップアップメニューの表示
マウスの右ボタンが押されたとき、 popupMenu1.show()で、メニューを表示します。項目を選択するとメニューは自動的に非表示になります。implementsでは使用しないメソッドを含めて、すべてのマウス関連メソッドを定義する必要があります。
public void mousePressed(MouseEvent e){
if((e.getModifiers() & InputEvent.BUTTON3_MASK) ==InputEvent.BUTTON3_MASK){
popupMenu1.show(this,e.getX(),e.getY());
};
}
- actionPerformed(ActionEvent e):メニューのリスナ
メニューの項目がマウスで選択されると、actionPerformed(ActionEvent e) が呼び出されます。getSource()で項目を判断し、対応する処理を行います。ここでは、ラベルへの表示を行います。
public void actionPerformed(ActionEvent e) {
if(e.getSource()==puItem1)
label1.setText("menu1");
if(e.getSource()==puItem2)
label1.setText("menu2");
}
- 実行
下のアプレットでマウスの右ボタンをクリックして下さい。
- 参考:メニューバー
Frameを継承したアプリケーションやダイアログではメニューバーを利用できます。menuBar,
Menu、を利用します。menbarにmenuを追加し、menubarをフレームに設定します。
Menubar menubar;
Menu menu;
menubar=new MenuBar();
menu = new Menu("FIle");
menu.add(menuitem1);
..
menubar.add(menu);
setMenuBar(menubar);
- ダウンロード
このプロジェクトをダウンロードできます。次の行をクリックして、popup.exeファイルを適当なフォルダに保存します。
ダウンロード開始
このファイルは自己解凍型の圧縮ファイルです。このファイルを実行すると指定したフォルダに必要なファイルが生成されます。
トップに戻る