-
[PR]
2024. 11. 21(木) 18:39
×[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
-
FXMLでメニューの作成
2016. 10. 22(土) 17:05
FXMLを使ってメニューを作成します。
メニューにも複数種類があり、
・メニューを一列に表示する「メニューバー」
・メニューを一つのボタンにまとめてしまう「メニューボタン」
・右クリックをした時に表示される「コンテキストメニュー」
あとはそれらに付随して「メニューアイテム」などが存在します。
メニューアイテムにも色々種類があるのでまとめておきたいと思います。
・MenuBar メニューバー ・Menu メニュー ・MenuItem メニューアイテム ・MenuButton 「メニューボタン」 ・SplitMenuButton 「メニュー」+「ボタン」 ・SeparatorMenuItem メニュー間の仕切り ・RadioMenuItem 単一選択式メニューアイテム ・CheckMenuItem 複数選択式メニューアイテム ・ContextMenu ポップアップメニュー(右クリックメニュー) ・CustomMenuItem 別のFXMLファイルを読み込む
MenuBarもはや説明不要とも思われるメニューを配置するためのバー。
一般的にはウィンドウ上部に配置されていることが多い。
因みに下部に配置されているのはステータスバーと呼ばれます。Menuメニューバー等に設置するアイテム。
メニューアイテムとの違いは子要素を持てること。作ろうと思えば、親>子>孫>曾孫....と延々とメニューの中にメニューを作れる。
MenuItemメニュー等に設置するアイテム。
メニューとの違いは子要素を持てないこと。
MenuButtonメニューを設置できるボタン
メニューバーと違って画面上の好きなところに配置できるのが利点。
最近「三」←こんな形のメニューボタンを見ることが増えた気がします。
スマートフォンが台頭する中で、狭い画面をより有効に使うために考案されたのでしょうか。<MenuButton text="メニューボタン"> <items>//ここを<menus>にするとエラーになってしまう <Menu text="メニュー1"> <items> <MenuItem text="メニューアイテム1"/> <MenuItem text="メニューアイテム2"/> </items> </Menu> <Menu text="メニュー2"/> </items> </MenuButton>
SplitMenuButtonメニューボタンと似ているが、ボタン部分とメニュー部分にニ分されているという違いがある。
ボタン部分をクリックすれば通常のボタンとして機能し、メニュー部分をクリックすればメニューボタンとしてメニューが展開される。<SplitMenuButton text="メニューボタン"> <items>//ここを<menus>にするとエラーになってしまう <Menu text="メニュー"> <items> <MenuItem text="メニューアイテム1"/> <MenuItem text="メニューアイテム2"/> <MenuItem text="メニューアイテム3"/> <MenuItem text="メニューアイテム4"/> </items> </Menu> </items> </SplitMenuButton>
SeparatorMenuItemメニューの間に仕切りをいれるためのアイテム。
<MenuBar> <menus> <Menu text="メニュー"> <items> <MenuItem text="メニューアイテム1"/> <MenuItem text="メニューアイテム2"/> <MenuItem text="メニューアイテム3"/> <SeparatorMenuItem/> <MenuItem text="メニューアイテム4"/> </items> </Menu> </menus> </MenuBar>
RadioMenuItem複数択一式のメニューアイテム
(例)メニューを表示しますか?
→「はい」「いいえ」など、同時に両立できない選択肢を使用するのに有効。<MenuBar> <menus> <Menu text="メニュー"> <items> <fx:define> <ToggleGroup fx:id="group1"/> </fx:define> <RadioMenuItem text="選択肢1" toggleGroup="$group1"/> <RadioMenuItem text="選択肢2" toggleGroup="$group1"/> <RadioMenuItem text="選択肢3" toggleGroup="$group1"/> <RadioMenuItem text="選択肢4" toggleGroup="$group1"/> </items> </Menu> </menus> </MenuBar>
CheckMenuItem複数選択式のメニューアイテム
(例)表示するメニューを選んでください
→「メニューA」「メニューB」など、同時に両立できる選択肢を使用するのに有効。<MenuBar> <menus> <Menu text="メニュー"> <items> <CheckMenuItem text="選択肢1"/> <CheckMenuItem text="選択肢2"/> <CheckMenuItem text="選択肢3"/> <CheckMenuItem text="選択肢4"/> </items> </Menu> </menus> </MenuBar>
ContextMenuポップアップメニューのことで、右クリックした時に表示されるメニューなんかが代表的。
SceneBuilderで色々試してみたところ、LabelやTextAreaなどのコンテンツには設定できるが、PaneやVBoxなどのコンテナには設定できなかった。
どういったルールなのかは不明なので可・不可の一覧を後々作成したいと思う。
設定可能:Label、TextArea、GridPane、ScrollPaneなど
設定不可:Pane、VBox、FlowPane、WebViewなど<TextArea text="テキストエリア"> <contextMenu> <ContextMenu> <items> <MenuItem text="メニューアイテム1"/> <MenuItem text="メニューアイテム2"/> <MenuItem text="メニューアイテム3"/> <MenuItem text="メニューアイテム4"/> </items> </ContextMenu> </contextMenu> </TextArea>
CustomMenuItemカスタマイズできるメニューアイテム。
自由にノードを組み込むことができるため、有用性は高い気がする。
下記の例ではチェックボックスとスライダーをメニューに表示させてみた。
hideOnClickプロパティをfalseにすれば、そのノードを弄っている間はメニューが非表示にならないようになる。<MenuBar> <menus> <Menu text="メニュー"> <items> <CustomMenuItem> <content> <CheckBox text="チェックボックス" /> </content> </CustomMenuItem> <CustomMenuItem hideOnClick="false"> <content> <Slider /> </content> </CustomMenuItem> <MenuItem text="メニューアイテム"/> <MenuItem text="メニューアイテム"/> </items> </Menu> </menus> </MenuBar>
Comment