「Java/swing/サンプル/JButton ボタンをクリックしたらメッセージを表示するサンプル」の編集履歴(バックアップ)一覧に戻る

Java/swing/サンプル/JButton ボタンをクリックしたらメッセージを表示するサンプル - (2012/12/28 (金) 03:36:59) のソース

* Java/swing/サンプル/JButton ボタンをクリックしたらメッセージを表示するサンプル

* その1 ボタンを表示するだけのサンプル
&ref(JButtonSample1.png)
#highlight(java){{
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class JButtonSample1 extends JFrame {

  public static void main(String[] args) {
    new JButtonSample1();
  }

  public JButtonSample1() {
    // ウィンドウの位置とサイズを指定
    setBounds(200, 100, 400, 100);
    // ウィンドウタイトル
    setTitle("JButton ボタンを表示するサンプル");
    // レイアウトマネージャーの設定
    setLayout(new FlowLayout());
    // ウィンドウクローズでアプリケーションを終了する設定
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    // ボタンのインスタンス作成
    JButton b = new JButton("クリックして下さい");
    // ボタンをフレームに追加
    add(b);

    // ウィンドウを表示する
    setVisible(true);
  }
}
}}
- ウィンドウを表示する基本的なプログラムの中で、以下部分がボタンを作ってウィンドウに追加するプログラムになります。
#highlight(java){{
    // ボタンのインスタンス作成
    JButton b = new JButton("クリックして下さい");
    // ボタンをフレームに追加
    add(b);
}}
- もちろんボタンをウィンドウに追加しただけでは、ボタンをクリックしても何も起きません。
- ボタンをクリックした時に「何か」をするには、Swingでは「リスナー(Listener)」という物を使います。
-- 「リスナー」と言えば、ラジオ番組でよく聞く言葉ですが直訳すると「聞き手」「聞く人」という意味になります。
-- Swing自体が音楽用語でもあるので、「アプリの動きに聞き耳を立てる」と思えば良いのかもしれません。
-- それでは早速「リスナー」を使ってみましょう。

* その2 ボタンをクリックしたらメッセージを表示するサンプル
&ref(JButtonSample2.png)
#highlight(java){{
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class JButtonSample2 extends JFrame {

  public static void main(String[] args) {
    new JButtonSample2();
  }

  public JButtonSample2() {
    // ウィンドウの位置とサイズを指定
    setBounds(200, 100, 400, 100);
    // ウィンドウタイトル
    setTitle("JButton ボタンをクリックしたらメッセージを表示するサンプル");
    // レイアウトマネージャーの設定
    setLayout(new FlowLayout());
    // ウィンドウクローズでアプリケーションを終了する設定
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    // ボタンのインスタンス作成
    JButton b = new JButton("クリックして下さい");
    // ボタンをフレームに追加
    add(b);

    // ★★★ 追加部分 ここから ★★★
    // ボタンにアクションリスナーを追加
    b.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        // メッセージダイアログを表示
        JOptionPane.showMessageDialog(null, "ハロー!");
      }
    });
    // ★★★ 追加部分 ここまで ★★★

    // ウィンドウを表示する
    setVisible(true);
  }
}
}}
- その1のサンプルに8行ほど追加しました。
- ボタンを作成した後で、「addActionListener」というメソッドを使って、ボタンに「リスナー」を追加しています。
-- 「リスナー」にも色んな種類がありますが、
-- 「ボタンをクリックした時」に「何か」をするにはこの「ActionListener」を使います。
--- 「ActionListener」の中に書かれている以下の部分が、ボタンをクリックした時に実行する「何か」です。
#highlight(java){{
// メッセージダイアログを表示
JOptionPane.showMessageDialog(null, "ハロー!");
}}
- 「new ActionListener()」のうしろが「;」で終わらず、「{ .... }」と続いているのは「無名クラス」と言うものです。
-- 少々癖のあるコードですが、Swingアプリでは普通に使うテクニックなので慣れて行きましょう。
--- ※ 「無名クラス」を使わなくてもリスナーを使うことは出来ます。

- 最後に、ボタンのサンプルとしては少々横道にそれますが、ダイアログの表示位置について。
-- 上記のコード「JOptionPane.showMessageDialog(null, "ハロー!");」の「null」の部分には、Swingのコンポーネントを指定することができます。
-- 今回は「null」を指定したため、「ハロー!」のダイアログが画面の真ん中に出ました。
-- 「null」ではなく、ウィンドウそのものを指定するとどうなるでしょうか?

* その3 ボタンをクリックしたらメッセージを表示するサンプル2
&ref(JButtonSample3.png)
#highlight(java){{
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class JButtonSample3 extends JFrame {

  public static void main(String[] args) {
    new JButtonSample3();
  }

  // ★★★ 追加部分 ここから ★★★
  JFrame mainFrame;

  // ★★★ 追加部分 ここまで ★★★
  public JButtonSample3() {
    // ウィンドウの位置とサイズを指定
    setBounds(200, 100, 400, 100);
    // ウィンドウタイトル
    setTitle("JButton ボタンをクリックしたらメッセージを表示するサンプル2");
    // レイアウトマネージャーの設定
    setLayout(new FlowLayout());
    // ウィンドウクローズでアプリケーションを終了する設定
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    // ボタンのインスタンス作成
    JButton b = new JButton("クリックして下さい");
    // ボタンをフレームに追加
    add(b);

    // ボタンにアクションリスナーを追加
    b.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        // メッセージダイアログを表示
        JOptionPane.showMessageDialog(null, "ハロー!");
        // ★★★ 追加部分 ここから ★★★
        JOptionPane.showMessageDialog(mainFrame, "ハロー!!");
        // ★★★ 追加部分 ここまで ★★★
      }
    });

    // ★★★ 追加部分 ここから ★★★
    mainFrame = this;
    // ★★★ 追加部分 ここまで ★★★

    // ウィンドウを表示する
    setVisible(true);
  }
}
}}
- 追加した「ハロー!!」のダイアログがウィンドウの上に表示されました。
-- 「ハロー!!」ダイアログの親コンポーネントとしてウィンドウを指定したため、画面の真ん中ではなくウィンドウの真ん中にダイアログが表示されたのです。
-- ウィンドウを親コンポーネントとして指定するために以下の3つの手順を追加しています。
--- クラス変数に「mainFrame」を作り、
--- コンストラクタで「mainFrame」に自分自身を設定
--- ダイアログの親コンポーネントに「mainFrame」を指定
-「リスナー」から使うためにクラス変数にSwingのコンポーネントを持たせるのも、わたしはよくやってしまいます。
-- クラス変数の多用はスマートじゃない気もするのですが便利なので!

* サンプルダウンロード
その1 &ref(JButtonSample1.java)
その2 &ref(JButtonSample2.java)
その3 &ref(JButtonSample3.java)

* コメント
#pcomment(reply)