デフォルトボタンの設定

広告

フレーム内などに複数のボタンが設置されている場合にデフォルトボタンを設定する方法を確認します。デフォルトボタンとはそのフレームの中で単にEnterキーを押した時に押されるボタンのことで、フォーカスがあるボタンとはまた別のものになります。

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

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

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

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

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

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

戻り値:
  rootPane プロパティー

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

JButton button = new JButton("ボタン");

JFrame frame = new JFrame();
frame.getRootPane().setDefaultButton(button);

デフォルトボタンが実際にどのように表示されるのかや挙動についてはサンプルを参照して下さい。

サンプルプログラム

では実際に試してみます。

SSample13_1.java

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

class SSample13_1 extends JFrame{
  public static void main(String args[]){
    SSample13_1 frame = new SSample13_1("タイトル");
    frame.setVisible(true);
  }

  SSample13_1(String title){
    setTitle(title);
    setBounds(100, 100, 300, 250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel p = new JPanel();

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

    getRootPane().setDefaultButton(button3);

    p.add(button1);
    p.add(button2);
    p.add(button3);
    p.add(button4);

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

ではコンパイルを行った上で実行してみます。

デフォルトボタンの設定

4つのボタンの中で"Cancel"と表示されたボタンをデフォルトボタンに設定しています。デフォルトボタンは枠が太線で表示されています。デフォルトボタンはReturnキーを押すと押されます。

見て頂くとお分かり頂けるのですがフォーカスがあるボタンは"Yes"と書かれたボタンです。その為、SPACEキーを押すと"Yes"と書かれたボタンが押されます。

( Written by Tatsuo Ikura )