import java.awt.*;
import java.awt.event.*;
public class Test{
Panel pnl;
TextArea txt;
public Test(){
/* コンポーネントを作ります。*/
txt = new TextArea();
/* フレームを作成します。*/
Frame frm = new Frame("18-46");
/* レイアウトを設定します。*/
frm.setLayout(new GridLayout(2, 1));
/* フレームのサイズを変更 */
frm.setSize(new Dimension(200,200));
pnl = new MenuPanel(txt);
/* フレームに登録します。*/
frm.add(pnl);
frm.add(txt);
/* フレームを表示させます。*/
frm.setVisible(true);
}
public static void main(String args[]){
new Test();
}
}
/* メニュー付きのフレームです */
class MenuPanel extends Panel implements ItemListener, ActionListener{
TextArea txt;
PopupMenu popup;
/* コンストラクタ */
/* イベントが起こった時のメッセージを表示するTextAreaを引数にとります */
MenuPanel(TextArea t){
txt = t;
/* ポップアップメニューを作成する */
popup = new PopupMenu();
/* Menu A作成 */
/* Menuを作り、そこに入れるMenuItemを作ります。*/
/* そしてMenuにMenuItemを入れ(addメソッド)、さらにMenuをMenuBarに入れます。*/
/* 最後にリスナーをMenuItemに登録します。*/
Menu menuA = new Menu("A");
MenuItem a1 = new MenuItem("A-1");
MenuItem a2 = new MenuItem("A-2");
MenuItem a3 = new MenuItem("A-3");
menuA.add(a1);
menuA.add(a2);
menuA.add(a3);
popup.add(menuA);
a1.addActionListener(this);
a2.addActionListener(this);
a3.addActionListener(this);
/* Menu B作成 */
/* MenuにMenu(b3)を入れることも可能です。*/
Menu menuB = new Menu("B");
MenuItem b1 = new MenuItem("B-1");
MenuItem b2 = new MenuItem("B-2");
Menu b3 = new Menu("B-3");
menuB.add(b1);
menuB.addSeparator();
menuB.add(b2);
menuB.add(b3);
popup.add(menuB);
b1.addActionListener(this);
b2.addActionListener(this);
/* Menu B2 のサブメニュー作成 */
MenuItem b3_1 = new MenuItem("B-3-1");
MenuItem b3_2 = new MenuItem("B-3-2");
b3.add(b3_1);
b3.add(b3_2);
b3_1.addActionListener(this);
b3_2.addActionListener(this);
/* Menu C作成 */
/* ここではCheckboxMenuItemを使用しています。*/
Menu menuC = new Menu("C");
CheckboxMenuItem c1 = new CheckboxMenuItem("C-1");
CheckboxMenuItem c2 = new CheckboxMenuItem("C-2");
CheckboxMenuItem c3 = new CheckboxMenuItem("C-2");
menuC.add(c1);
menuC.add(c2);
menuC.add(c3);
popup.add(menuC);
c1.addItemListener(this);
c2.addItemListener(this);
c3.addItemListener(this);
/* リスナーを登録します。*/
addMouseListener(new TestMouseAdapter(this));
/* ポップアップメニューを登録する */
add(popup);
}
/* MenuItemが選択された */
public void actionPerformed(ActionEvent e){
txt.insert( ((MenuItem)e.getSource()).getLabel() + "\n" , 0);
}
/* CheckboxItemが選択/選択解除された */
public void itemStateChanged(ItemEvent e){
txt.insert( ((MenuItem)e.getSource()).getLabel() + "\n" , 0);
}
/* マウスのアダプタークラス */
class TestMouseAdapter extends MouseAdapter{
MenuPanel panel;
/* コンストラクタ */
TestMouseAdapter(MenuPanel pnl){
panel = pnl;
}
/* 右クリックされたらポップアップメニューを表示する */
public void mouseReleased(MouseEvent e){
/* ポップアップトリガーならメニューを表示 */
/* プラットフォームによってはmouseReleasedでポップアップトリガーが */
/* 呼ばれるかわからないのでmousePressedやmouseClickedでも実装した方がよい。*/
if( e.isPopupTrigger() ){
panel.popup.show(panel, e.getX(), e.getY());
}
}
}
}
|