ラジオボタンの余白の変更と枠線の変更

ラジオボタンでは表示される文字列や画像の回りに余白が設定されていますが変更することができます。またデフォルトで表示されている枠線を任意の枠線に変更することもできます。ここではラジオボタンに設定されている余白を変更する方法とラジオボタンの枠線を変更する方法について解説します。

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

余白を変更する

ラジオボタンに表示される文字列や画像とラジオボタンの枠線との間の余白を設定するには JRadioButton クラスの親クラスである AbstractButton クラスで用意されている setMargin メソッドを使います。

public void setMargin(Insets m)

ボタンのボーダーとラベルの間のマージンを設定します。 nullに設定すると、ボタンはデフォルトのマージンを使用します。 ボタンのデフォルトのBorderオブジェクトは、この値を使用して適切なマージンを作成します。 ただし、ボタンにデフォルト以外の境界が設定されている場合は、Borderオブジェクトが適切なマージン空白を作成します(それ以外の場合、このプロパティは事実上無視されます)。

パラメータ:
m - ボーダーとラベルの間のマージン

引数には上下左右の余白の大きさを保持する Insets クラスのオブジェクトを指定します。( Insets クラスの詳細は「Insetsクラス」を参照して下さい)。

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

JRadioButton radio = new JRadioButton("Apple");
radio.setMargin(new Insets(10, 10, 10, 10));

サンプルプログラム

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

import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.JPanel;
import javax.swing.ButtonGroup;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.Color;

class JSample8_1 extends JFrame{

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

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

    JRadioButton radio1 = new JRadioButton("Apple");
    radio1.setBackground(Color.WHITE);

    JRadioButton radio2 = new JRadioButton("Orange");
    radio2.setMargin(new Insets(30, 30, 80, 30));
    radio2.setBackground(Color.ORANGE);

    JRadioButton radio3 = new JRadioButton("Peach");
    radio3.setMargin(new Insets(0, 0, 0, 0));
    radio3.setBackground(Color.PINK);

    ButtonGroup bgroup = new ButtonGroup();
    bgroup.add(radio1);
    bgroup.add(radio2);
    bgroup.add(radio3);

    JPanel p = new JPanel();
    p.add(radio1);
    p.add(radio2);
    p.add(radio3);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }
}

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

javac JSample8_1.java

余白を変更する(1)

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

java JSample8_1

ラジオボタンを 3 つ追加しました。 1 つ目のラジオボタンはデフォルトのまま、 2 つ目のラジオボタンには少し大きめの余白を設定し、 3 つ目のラジオボタンは余白を 0 に設定しています。

余白を変更する(2)

枠線を変更する

ラジオボタンにはデフォルトで枠線が表示されていまっせん。枠線を表示するかどうか設定するには JRadioButton クラスの親クラスである AbstractButton クラスで定義されている setBorderPainted メソッドを使って設定します。

public void setBorderPainted(boolean b)

borderPaintedプロパティを設定します。 trueでボタンがボーダーを持つ場合は、ボーダーがペイントされます。 borderPaintedプロパティのデフォルト値はtrueです。 ルック・アンド・フィールによってはborderPaintedプロパティがサポートされない場合があり、その場合、これは無視されます。

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

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

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

JRadioButton radio = new JRadioButton("Apple");
radio.setBorderPainted(true);

この場合、ラジオボタンの枠線が表示されるようになります。

-- --

次にラジオボタンに枠線が表示されているときに枠線のスタイルを変更することができます。ラジオボタンの枠線を変更するには JRadioButton クラスの親クラスである JComponent クラスで用意されている setBorder メソッドを使います。

public void setBorder(Border border)

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

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

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

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

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

JRadioButton radio = new JRadioButton("Apple");
radio.setBorderPainted(true);

LineBorder border = new LineBorder(Color.RED, 2, true);
radio.setBorder(border);

なお枠線を設定した場合、必要に応じて余白を設定する必要があります。ただし枠線を設定したボタンに余白を設定しても反映されない場合があります。

サンプルプログラム

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

import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.JPanel;
import javax.swing.ButtonGroup;
import javax.swing.border.LineBorder;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.Color;

class JSample8_2 extends JFrame{

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

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

    JRadioButton radio1 = new JRadioButton("Apple");

    JRadioButton radio2 = new JRadioButton("Orange");
    radio2.setBorderPainted(true);

    JRadioButton radio3 = new JRadioButton("Peach");
    radio3.setBorderPainted(true);
    radio3.setBorder(new LineBorder(Color.RED, 2, false));

    JRadioButton radio4 = new JRadioButton("Banana");
    JPanel radiobox_panel = new JPanel();
    radiobox_panel.add(radio4);
    radiobox_panel.setBorder(new LineBorder(Color.BLUE, 2, false));

    ButtonGroup bgroup = new ButtonGroup();
    bgroup.add(radio1);
    bgroup.add(radio2);
    bgroup.add(radio3);
    bgroup.add(radio4);

    JPanel p = new JPanel();
    p.add(radio1);
    p.add(radio2);
    p.add(radio3);
    p.add(radiobox_panel);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }
}

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

javac JSample8_2.java

枠線を変更する(1)

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

java JSample8_2

ラジオボタンを 4 つ追加しました。 1 つ目のラジオボタンはデフォルトのまま、 2 つ目のラジオボタンにはデフォルトの枠線を表示するように設定しました。 3 つ目のラジオボタンと 4 つ目のラジオボタンにはデフォルトとは異なる枠線を設定しています。

枠線を変更する(2)

3 つ目のラジオボタンを見て頂くと分かりますが、デフォルトとは異なる枠線を設定すると余白が変更されます。この場合は余白がゼロになっているように見えます。 setMargin メソッドを使って余白を設定しても反映されなかったため、 4 つ目のラジオボタンはパネルを一つ作成したあとパネルにラジオボタンを追加し、パネルに枠線を設定しました。

-- --

ラジオボタンに設定されている余白を変更する方法とラジオボタンの枠線を変更する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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