複数のボタンの中からデフォルトボタンを設定する

フレームに複数のボタンが設置されている場合にその中の一つのボタンをデフォルトボタンとして設定する方法を解説しますす。デフォルトボタンとはフレームが表示さえている時に Enter キーを押した時に押されるボタンのことです。フォーカスがあるボタンとはまた別のものになります。

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

デフォルトボタンを設定する

デフォルトボタンの設定は JRootPane クラスで定義されている setDefaultButton メソッドを使います。

public void setDefaultButton(JButton defaultButton)

defaultButtonプロパティを設定して、このJRootPaneの現在のデフォルト・ボタンを指定します。
デフォルト・ボタンは、ボタンにキーボード・フォーカスがあるかどうかにかかわらず、ルート・ペインでUI定義の起動イベント(通常はEnterキー)が発生したときに起動されるボタンです(ルート・ペイン内にJTextPaneなどの起動イベントを消費する別のコンポーネントがある場合を除く)。
デフォルトの起動が機能するには、ボタンは起動が発生した時点でルート・ペインの使用可能な子孫である必要があります。
このルート・ペインからデフォルト・ボタンを削除するには、このプロパティをnullに設定します。

パラメータ:
defaultButton - デフォルト・ボタンになるJButton

引数にはデフォルトボタンに設定したい JButton クラスのオブジェクトを指定します。

このメソッドを実行するためには JRootPane クラスのオブジェクトを先に取得する必要があります。 JRootPane は ContentPane などと同じく JFrame が内部で使用するコンテナの一つで、 JFrame クラスで定義されている getRootPane メソッドで取得できます。

public JRootPane getRootPane()

このフレームのrootPaneオブジェクトを返します。

定義:
getRootPane、インタフェース: RootPaneContainer

戻り値:
rootPaneプロパティ

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

JButton button = new JButton("OK");

JFrame frame = new JFrame();
frame.getRootPane().setDefaultButton(button);
サンプルコード

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

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.Container;
import java.awt.BorderLayout;

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

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

    JButton button1 = new JButton("Yes");
    JButton button2 = new JButton("No");
    JButton button3 = new JButton("Cancel");
    JButton button4 = new JButton("Help");

    getRootPane().setDefaultButton(button3);

    JPanel p = new JPanel();
    p.add(button1);
    p.add(button2);
    p.add(button3);
    p.add(button4);

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

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

javac JSample13_1.java

デフォルトボタンを設定する(1)

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

java JSample13_1

ボタンを 4 つ追加しました。 3 つ目の "Cancel" と表示されているボタンをデフォルトボタンに設定しました。デフォルトボタンは "Enter" キーを押すとボタンが押されます。

デフォルトボタンを設定する(2)

フォーカスのあるボタンは 1 つ目の "Yes"と表示されているボタンです。 SPACE キーを押すとフォーカスのあるボタンが押されます。

-- --

フレームに複数のボタンが設置されている場合にその中の一つのボタンをデフォルトボタンとして設定する方法を解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。