パソコン作法

情報系の紹介をします

Javaでミニゲームを作ろう 3:ボタンに機能を付ける

今回はActionListenerとActionEventとJLabelについて紹介します。
ActionListenerとActionEventを使えばボタンに機能を付けることができるので、ミニゲームの作成により一層近づくでしょう。

 

f:id:PCDiary:20180721180624p:plain

カイ:今回はボタンに機能を付けるんでしたね。
   ボタンを押したら派手な演出ができるようにしたいな~。

f:id:PCDiary:20180721180655p:plain

ジョン:う~ん、派手な演出はまだできないかな。
    もっと他のクラスとかを覚えないといけないからね。
    今回はボタンを押したら文字が出てくるように設定しよう。
    じゃあ最初に文字を表示するクラスについて紹介するよ。

1.JLabelとは

JLabelはウィンドウに文字を表示するクラスです。
主に下図のように表示されます。

f:id:PCDiary:20180730231319p:plain

JLableのメソッドはJButtonのメソッドと似ています。

f:id:PCDiary:20180721180624p:plain
カイ:どんな感じで似ているんですか?

f:id:PCDiary:20180721180655p:plain
ジョン:例えば前回説明したsetText("");とsetBounds(x,y,s,t);とsetFont();は
    JLabelでも同じように使えるよ。

2.ActionListenerとActionEventについて

この2つはそれぞれ別のものですが、だいたい一緒に使います。
クラスの機能を一言で言いますとActionListenerは「ボタンの登録」
ActionEventは「ボタンの機能付け」です。

 

f:id:PCDiary:20180721180624p:plain
カイ:「ボタンの機能付け」はわかりますが、「ボタンの登録」って何ですか?

f:id:PCDiary:20180721180655p:plain
ジョン:ボタンのリストに登録するって感じかな。
    ActionListenerで登録されたボタンでしか機能を付けることは
    できないんだ。

3.ボタンに機能を付けてみよう

それではボタンに機能を付けてみます。
下のソースコードをコピペして実行してください。

import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Button extends JFrame implements ActionListener{
JButton btn = new JButton();
JPanel p = new JPanel();
JLabel lab = new JLabel();

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

Button() {
setTitle("title");
setSize(700, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p.setLayout(null);

btn.setText("じゃんけん");
btn.setBounds(190, 170, 300, 100);
btn.setFont(new Font("MS ゴシック", Font.BOLD, 32));
btn.addActionListener(this);

lab.setText("チョキ");
lab.setFont(new Font("MS ゴシック", Font.BOLD, 32));

p.add(btn);
p.add(lab);
getContentPane().add(p);
}
@Override
public void actionPerformed(ActionEvent e) {
String cmdName = e.getActionCommand();
if ("じゃんけん".equals(cmdName)) {
btn.setBounds(0,0,0,0);
lab.setBounds(300,170,300,100);
}
}
}

 

すると下の図と同じものが出てきます。

ボタン

このボタンを押してみてください。
そうすると下の図のようになります。

チョキという文字

 

それでは赤色部分の解説をしましょう。
緑色で書かれたJLabelのメソッドは前回紹介したJButtonのメソッドと全く一緒なので解説を省きます。


1.addActionListener(this);

ボタンをリストに登録するメソッドです。
リストに登録されたボタンのみ機能を付けることができます。
書き忘れることがよくあるので注意しましょう。

 

2.public void actionPerformed(ActionEvent e) { }

ボタンに機能を付けるメソッドです。
{ }の中にいろいろと書き込んでボタンに機能を付けます。

ボタンを押したらこのメソッドが呼び出されて、引数のeに押したボタンの情報が入ります。

public void actionPerformed(ActionEvent e) { }を使うときは11行目のpublic class Button ~のようなクラス名の後ろにimplements ActionListeneroを書き込んでOverride してください。上のコードはすでにしてあるので不要です。

 

3.String cmdName = e.getActionCommand();

押したボタンの名前(setText("")で指定された名前)がcmdNameに入ります。
上のソースコードの場合「じゃんけん」がcmdNameに入ります。

 

4.if ("じゃんけん".equals(cmdName)) { }

押したボタンの名前(setText("")で指定された名前)と「""」内の名前が一致した場合のみ
{ }内に書かれた処理が行われます。
例えば「""」内が「じゃんけん」であり、押したボタンの名前が「じゃんけん」である場合のみ{ }処理が実行されます。

 

f:id:PCDiary:20180721180624p:plain

カイ:public void actionPerformed(ActionEvent e) { }の部分がよくわからないです...。

 

f:id:PCDiary:20180721180655p:plain

ジョン:まだわからなくても大丈夫だよ。これからも使っていくから
    直に慣れよ。

 public void actionPerformed(ActionEvent e) {
    String cmdName = e.getActionCommand();
    if ("~".equals(cmdName)) {

    }
}
の形は今後も使っていきます。
頭がこんがらがる方はそれぞれのメソッドの意味を覚えなくても大丈夫です。
このコードを見たら「ボタンに機能をつけるメソッドだな」と思ってください。

 

4.まとめ

ActionEventは結構わかりにくかったと思いますが心配しないでください。
自分でソースコードを書いていくとだんだんと慣れていきます。

ある程度のクラスが紹介し終わったので、次回からじゃんけんのミニゲームを作っていきましょう。

 

 

次回

pcdiary.hateblo.jp

 

前回 

pcdiary.hateblo.jp