Java Drawing DrawTop

Language

JP  US  UK

 

ポップアップメニュー

 H. Jyounishi, Tokyo Japan
 

Frame (Index), No frame                 version:0.3(latest)  

要旨:コマンドを定義するクラス、受け付けたコマンドを処理するオブジェクトにディスパッチするクラス、ポッポアップメニューを実行するクラスからなる。

このページで説明するクラス: PopupPulldownMenu, PopupMenuAction

1.概要


1.1 ポップアップメニューの種類

種類

説明

ShapePopupMenu

単一図形のポップアップメニュー

PopupPulldownMenuのstaticメソッドcreateShapePopupMenuで作成する。

GroupPopupMenu

グループ図形のポップアップメニュー
単一図形をクリックして選択し、続けて右マウスボタンをクリックする。

PopupPulldownMenuのstaticメソッドcreateGrouprPopupMenuで作成する。

TextBoxPopupMenu

単一図形またはグループ図形のテキストボックス(緑色の枠内)のポップアップメニュー
単一図形またはグループ図形をクリックして選択し、続けて右マウスボタンをクリック。
下図の例では選択されているテキスト(ピンク色の部分)に対して、実行可能なメニューアイテムが表示されている。

PopupPulldownMenuのstaticメソッドcreateTextBoxPopupMenuで作成する。

DrawPanelPopupMenu

表示パネルのポップアップメニュー。
図形の表示されていない位置で右ボタンを押すとこのポップアップメニューが現れる。

PopupPulldownMenuのstaticメソッドcreateDrawPanelPopupMenuで作成する。



1.2 ポップアップメニューの起動、コマンド実行 戻る=>page top

ステップ

説明

ステップ1 マウス右ボタンが押されたことを検出 マウス右ボタンが押されたかどうかは、MousePositionLS (またはSelectionLS)mousePressed メソッドで検出できる。もし右ボタンが押されたら、mouseClicked メソッドでExecPopupMenushow メソッドを呼んで、ポップアップメニューを表示する。
ステップ2 ポップアップメニューの表示 ExecPopupMenushow メソッドで、右ボタンが押された位置から表示するポップアップメニューの種類を決定し、showメソッドで表示する。
ステップ3 メニュー選択のアクション メニューを選択するとPopupMenuAction.actionPerformedメソッドで、Commandオブジェクトを作成し、ExecCommand.execメソッドを呼んでコマンドを実行する。
例えば"shape format"を選択した場合、PopupMenuActionで”SHAPE_FORMAT”コマンドが作成され、ExecCommand.execメソッドで次のように実行される。

case Command.SHAPE_FORMAT:{
Point point=(Point)params[0];
ShapeContainer container=(ShapeContainer)params[1];
DialogOfShapeFormat dialog=new DialogOfShapeFormat();
dialog.showDialog(container);
break;
}



2. PopupPulldownMenuクラス 戻る=>page top

public class PopupPulldownMenu extends JPopupMenu implements DrawMenuIF

画面上でマウス右ボタンを押した時に表示するポップアップメニューを定義する(参照=>1.1 ポップアップメニューの種類)。プルダウンメニューは実行可能なメニューアイテムを表示する。どのポップアップメニューを表示するかは、ExecPopupMenuが制御する。

メニューアイテムを選んだときのアクション処理は、PopupMenuActionで、通常のコマンド分岐処理と同様、ExecCommandのexecメソッドを呼ぶ。


フィールド

説明

menuAction

PopupMenuAction menuAction=new PopupMenuAction(this);

このオブジェクトに設定するActionListener (PopupMenuAction)。

point

public static Point point
このクラスのshowメソッドの引数で渡された値が設定される。showメソッドはExecPopupMenuから呼ばれる。
ポップアップメニューを表示するためにマウスの右ボタンを押した時のマウスイベントで、MousePositionLSまたはSelectionLSのmouseClickedメソッドで受け取ったマウスイベントである。

container

public static ShapeContainer container
このクラスのshowメソッドの引数で渡された値が設定される。

ExecPopupMenuのshowメソッドでcontainerを設定する。


メソッド

説明

コンストラクタ

public PopupPulldownMenu(String commandName, String[] menuItemNames, ImageIcon[] icons, String[] accelerators)

引数:

commandName - コマンド名

"shape popup menu"、"group popup menu"、"edit shape popup menu"など

menuItemNames - メニューアイテム名

icons - メニューアイテムに貼り付けるImageIcon

iconsにnullを指定したら、全てのmenuItemにIconを設定しない。またicons[i]==nullならばi番目のmenuItemにはIconを設定しない。

accelerators - accelerator文字列の配列。

accelerators[i]がnullでなければmenuItem.setAccelerator(stroke)でacceleratorを設定。

setMenuItems

public void setMenuItems(String[] menuItemNames, ImageIcon[] imageIcons, String[] accelerators)

テキストとImageIconからなるメニューアイテムの設定を行う。

ボタンやチェックボックスを設定するメニューアイテムはこのメソッドを使わずに独自に設定する。引数は配列になっており、メニューアイテムの数だけ指定する。

引数:

menuItemNames - メニューアイテム名の配列。

imageIcons - メニューアイテムに表示するImageIconの配列。

accelerators - メニューアイテムに設定するアクセラレータの配列。

処理:

①メニューアイテム名とアクセラレータを表示する最大幅と最大高さを計算。

②メニューアイテムを設定する。

メニューアイテム名の文字列とIcon画像の表示位置を確実に整列させるため、各々をLabelに張りつけ、LabelのサイズをsetPreferredSizeメソッドで指定する。文字列を貼り付けるLabelのサイズは①で求めた文字列の最大表示幅にマージンを加えた値、ImageIconを貼り付けるLabelのサイズは、原画像のサイズから決める。

getTextLayoutSize

private Dimension getTextSize(String text, Font font)

引数textで指定されるテキストを、引数fontで描画するときのテキストのサイズをDimensionオブジェクトで返す。

TextLayoutオブジェクトを作成し、getAdvance、getAscent、getDescentメソッドを使ってテキストのサイズを取得する。

getMenuItem

public JMenuItem getMenuItem(String menuItemName)

メニューアイテム名を指定してJMenuItemオブジェクトを返す。

JPopupMenuのgetComponentsメソッドでJMenuItemオブジェクトを取得。JMenuItemオブジェクトのComponent名とmenuItemNameをCommand.compareStringsメソッドで比較し、一致するオブジェクトを返す。

setEnable
ToAllMenuItems

public void setEnableToAllMenuItems()

このJPopupMenuの全てのメニュアイテムを選択可能にする、

show

public void showMenu(Point point, ShapeContainer container)

引数:

point - ポップアップメニューを開くためにマウスの右ボタンを押した点

container - ShapeContainerオブジェクトまたはnull

処理:

ExecPopupMenu.showから呼ばれ、プルダウンメニューを表示する。

this.point=point;
this.container=container;
this.show(ObjectTable.getDrawPanel(), (int)point.getX(), (int)point.getY());

createSingleShapePopupMenu

public static void createSingleShapeContainerPopupMenu()

図形要素用のPopupPulldownMenu

次のように引数を設定しコンストラクターを呼ぶ。

String commandName=Command.getCommandString(Command.SHAPE_POPUP_MENU);
String[] imageName={"", "", "", "", "", ""};
String[] menuItemNames={"cut", "copy", "delete", "add text box", "modify shape",
"shape format"};

createGroupShapePopupMenu

public static void createGroupShapeContainerPopupMenu()

グループ図形用のPopupPulldownMenu

次のように引数を設定しコンストラクターを呼ぶ。

String commandName=Command.getCommandString(Command.GROUP_POPUP_MENU);
String[] imageName={"", "", "", ""};
String[] menuItemNames={"cut", "copy", "delete", "shape format"};

createDrawPanelPopupMenu

public static void createDrawPanelPopupMenu()

DrawPanel用のPopupPulldownMenu

次のように引数を設定しコンストラクターを呼ぶ。

String commandName=Command.getCommandString(Command.DRAWPANEL_POPUP_MENU);
String[] imageName={"", ""};
String[] menuItemNames={"paste", "draw panel information"};

createTextBoxPopupMenu public static void createTextBoxPopupMenu()


3. PopupMenuActionクラス 戻る=>page top

class PopupMenuAction extends AbstractAction

フィールド

説明

popupPulldownMenu

PopupPulldownMenu popupPulldownMenu

このオブジェクトを作成したPopupPulldownMenuオブジェクト。


メソッド

説明

Constructor

PopupMenuAction(PopupPulldownMenu popupPulldownMenu)
引数をフィールド変数に設定する。

actionPerformed

public void actionPerformed(ActionEvent e)

commandId と引数 (params) を次のように設定しでCommandオブジェクトを作成しExecCommandの exec メソッドを呼ぶ。

∙ commandId

int commandId
=Command.getCommandId(this.buttonOfPulldownMenu.menu.getActionCommand());

∙ 引数

args[0]=this.popupPulldownMenu.point;
args[1]=this.popupPulldownMenu.container;



Copyright (c) 2009-2013
All other trademarks are property of their respective owners.