メニューバー
メニューと項目
Swing では、メニューバーもコンポーネントとして扱われるため
軽量であることはもちろん、機能に関しても統一性のあるすばらしい仕組みになっています
メニューバーは javax.swing.JMenuBar クラスを使います
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--javax.swing.JComponent
|
+--javax.swing.JMenuBar
public class JMenuBar extends JComponent
implements Accessible, MenuElement
このクラスのコンストラクタはデフォルトコンストラクタのみを提供しています
生成したメニューバーは、コンテンツペインの add() で設定するのではなく
アプレットの場合は JApplet.setJMenuBar() メソッドで
フレームならば JFrame.setJMenuBar() メソッドで設定します
又、それぞれのクラスは設定されているメニューを返す getJMenuBar() も用意しています
public void setJMenuBar(JMenuBar menuBar)
public JMenuBar getJMenuBar()
JApplet と JFrame は直接の関係がないため、これらのメソッドに互換性はありませんが
機能的には類似しているので、ソースレベルでは同一です
メニューバーを生成しただけでは、まだメニュー項目は作られていません
項目を示すボタンを保有するメニューの実体は javax.swing.JMenu クラスを使います
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--javax.swing.JComponent
|
+--javax.swing.AbstractButton
|
+--javax.swing.JMenuItem
|
+--javax.swing.JMenu
public class JMenu extends JMenuItem
implements Accessible, MenuElement
このクラスは、メニュー項目を示す JMenuItem クラスを継承しています
JMenuItem クラスについては、すぐ後で詳しく説明します
このクラスは、次のようなコンストラクタを公開しています
public JMenu()
public JMenu(String s)
public JMenu(Action a)
public JMenu(String s , boolean b)
s には、このメニューのラベルとなるテキストを
a には、このメニューのプロパティを示すアクションを
b は、メニューがティアオフ可能かどうかを示す論理地を指定します
(Java 1.4 以前では、ティアオフ機能は宣言されているだけで、未実装です)
メニューにメニュー項目を追加するには JMenu.add() メソッドを使います
public JMenuItem add(JMenuItem menuItem)
public Component add(Component c)
public Component add(Component c , int index)
public JMenuItem add(String s)
public JMenuItem add(Action a)
メニュー項目は JMenuItem が実装なので、もっとも詳細な設定を反映できるのは
menuItem を引数としてメニュー項目自体を追加する方法です
JMenuItem についてはこの後、詳しく説明します
c はメニューの末尾にコンポーネントを追加します
index を指定した場合は、指定したインデックスにコンポーネントを追加します
コンポーネントを使ったメニュー項目についても、今後詳しく説明します
s はメニュー項目のラベルとなるテキストを指定します
メニュー項目を追加する方法で、最も簡単なものです
a は、必要なプロパティ情報を保有したアクションを指定します
JMenuItem を返すメソッドは、追加されたメニュー項目の実装 JMenuItem を
Component を返すメソッドは、追加されたコンポーネントを返します
メニューは、作成しただけではメニューバーに反映されません
メニューバーに新しくメニューを設定するには JMenuBar.add() メソッドを使います
public JMenu add(JMenu c)
c にはバーの末尾に追加するメニューを指定します
このメソッドは、追加されたメニューを返します
import java.awt.*;
import javax.swing.*;
public class Test extends JApplet {
public void init() {
JMenuBar menuBar = new JMenuBar();
JMenu menu1 = new JMenu("The forever you wish");
JMenu menu2 = new JMenu("Forget me Not");
menu1.add("遙");
menu1.add("水月");
menu2.add("エアリオ");
menu2.add("香澄");
menu2.add("沙耶");
menu2.add("こより");
menuBar.add(menu1);
menuBar.add(menu2);
setJMenuBar(menuBar);
}
}
このプログラムは、二つのメニューを持つメニューバーを作成しています
それぞれのメニューには、固有のメニュー項目を add(string) で追加しています
Swing のメニューで極めて重要なことは、これらが軽量コンポーネントであり
システムが提供するメニューサービスとは異なる存在だということです
そのため、システムが提供するメニュー機能はサポートされていません
メニュー項目を分けるセパレータは、JMenu.addSeparator() を使います
public void addSeparator()
これを指定すれば、メニューの末尾にセパレータを挿入します
import java.awt.*;
import javax.swing.*;
public class Test extends JApplet {
public void init() {
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Forget me Not");
menu.add("エアリオ");
menu.add("香澄");
menu.addSeparator();
menu.add("沙耶");
menu.add("真綾");
menu.addSeparator();
menu.add("こより");
menuBar.add(menu);
setJMenuBar(menuBar);
}
}
このプログラムは、項目の「香澄」と「沙耶」の間
「真綾」と「こより」の間の2ヶ所にセパレータを挿入しています