メニューバーの枠線の表示/非表示の切り替えと枠線の種類

メニューバーはデフォルトで枠線が表示されていますが非表示にすることもできます。また枠線の種類を設定することもできます。ここではメニューバーの枠線を表示するかどうかを設定する方法、および枠線の種類を設定する方法について解説します。

(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)

メニューバーの枠線の表示と非表示を切り替える

メニューバーで枠線を表示するかどうかを切り替えるには JMenuBar クラスで定義されている setBorderPainted メソッドを使います。

public void setBorderPainted(boolean b)

ボーダーをペイントするかどうかを設定します。

パラメータ:
b - このパラメータがtrueで、ボーダーのプロパティがnullでない場合、ボーダーをペイントする。

引数には枠線を描画するかどうかを表す boolean 型の値を設定して下さい。 true を設定すると枠線を描画し、 false を設定すると枠線を描画しません。デフォルトの値は true です。

実際の使い方は次のようになります。

JMenuBar menubar = new JMenuBar();
menubar.setBorderPainted(false);

メニューバーの枠線を非表示にしました。

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample3_1.java という名前で保存します。

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;

class JSample3_1 extends JFrame{
  public static void main(String args[]){
    JSample3_1 frame = new JSample3_1("MyTitle");
    frame.setVisible(true);
  }

  JSample3_1(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menubar = new JMenuBar();
    menubar.setBorderPainted(false);

    JMenu menu1 = new JMenu("File");
    JMenu menu2 = new JMenu("Edit");

    menubar.add(menu1);
    menubar.add(menu2);

    setJMenuBar(menubar);
  }
}

次のようにコンパイルを行います。

javac JSample3_1.java

メニューバーの枠線の表示と非表示を切り替える(1)

コンパイルが終わりましたら実行します。

java JSample3_1

メニューを作成しました。メニューバーの枠線を非表示にしてあります。

メニューバーの枠線の表示と非表示を切り替える(2)

なお枠線を表示した場合は、次のように表示されます。違いが分かりますでしょうか。

メニューバーの枠線の表示と非表示を切り替える(3)

メニューバーに表示される枠線の種類を設定する

メニューバーに表示される枠線の種類を変更するには、 JMenuBar クラスの親クラスである JComponent クラスで用意されている setBorder メソッドを使います。

public void setBorder(Border border)

このコンポーネントのボーダーを設定します。 Borderオブジェクトは、コンポーネントのイン・セットを定義し(コンポーネントで直接設定されているイン・セットをオーバーライドする)、任意でそれらのイン・セットの境界内のボーダー装飾をレンダリングします。 Swingコンポーネントで装飾領域および非装飾領域(マージンおよびパディングなど)の両方を生成するには、イン・セットではなくボーダーを使用する必要があります。 単一のコンポーネント内で複数のボーダーを入れ子にするには、複合ボーダーを使用できます。
技術的にはJComponentを継承するどのオブジェクトにもボーダーを設定できますが、標準のSwingコンポーネントのルック・アンド・フィールの実装の多くは、ユーザー設定のボーダーでは正しく動作しません。 通常、JPanelまたはJLabel以外の標準のSwingコンポーネントでボーダーを設定するときは、コンポーネントをJPanelに入れて、JPanelでボーダーを設定することをお勧めします。

これはバウンド・プロパティです。

パラメータ:
border - このコンポーネントでレンダリングされるボーダー

引数には枠線を表す Border インターフェースを実装したクラスのオブジェクトを指定します。( Border インターフェースの詳細は「Border」を参照して下さい)。

実際の使い方は次のようになります。

JMenuBar menubar = new JMenuBar();
LineBorder border = new LineBorder(Color.RED, 2, true);
label.setBorder(border);

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample3_2.java という名前で保存します。

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.border.LineBorder;
import java.awt.Color;

class JSample3_2 extends JFrame{
  public static void main(String args[]){
    JSample3_2 frame = new JSample3_2("MyTitle");
    frame.setVisible(true);
  }

  JSample3_2(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menubar = new JMenuBar();
    LineBorder border = new LineBorder(Color.PINK, 3, true);
    menubar.setBorder(border);

    JMenu menu1 = new JMenu("File");
    JMenu menu2 = new JMenu("Edit");

    menubar.add(menu1);
    menubar.add(menu2);

    setJMenuBar(menubar);
  }
}

次のようにコンパイルを行います。

javac JSample3_2.java

メニューバーに表示される枠線の種類を設定する(1)

コンパイルが終わりましたら実行します。

java JSample3_2

メニューを作成しました。メニューバーの枠線をデフォルトとは異なる種類に設定してあります。

メニューバーに表示される枠線の種類を設定する(2)

-- --

メニューバーの枠線を表示するかどうかを設定する方法、および枠線の種類を設定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。