スケジュール前のページJavaの基礎5

JAVAの基礎6

イベント処理2:ボタンの使用

今まで,テキストフィールドを用いて入力欄を作り数値をプログラムが受け取れるようにしました.

今回は別のコントロール「ボタン」を利用するプログラムを作ってみましょう.

ボタンを使用した例

画面に2つのボタンを表示し,1つは押すと文字列が表示され,もう1つは表示が消えるプログラムを作ってみましょう.

/**************************************************
 Button
**************************************************/
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.control.Button;

public class FirstButton extends Application{
	
    public static void main(String[] args) {
        launch(args);
    }

	//ボタンの作成
    Button btn1 = new Button("表示");
    Button btn2 = new Button("消去");
    Label label = new Label();
	
    @Override
    public void start(Stage stage) throws Exception {
    	
    	stage.setTitle("Application FirstButton");
    	
    	VBox root = new VBox();
    	
    	root.setAlignment(Pos.CENTER);
    	root.setPadding(new Insets(10,10,10,10));
    	root.setSpacing(10.0);
    	
    	HBox pane = new HBox();
    	
    	pane.setAlignment(Pos.CENTER);
    	pane.setPadding(new Insets(10,10,10,10));
    	pane.setSpacing(5.0);
    	
    	pane.getChildren().addAll(btn1,btn2);
    	
    	//ボタンを押した時のイベント処理
    	btn1.setOnAction(event -> dispText());
    	btn2.setOnAction(event -> clrText());
    	
    	root.getChildren().addAll(label,pane);
    	
    	Scene scene = new Scene(root,200,100);
    	stage.setScene(scene);
        stage.show();
    }
    
    //dispTextメソッドの定義
    private void dispText() {
    	label.setText("文字が表示されました!");
    }
    //clrTextメソッドの定義
    private void clrText() {
    	label.setText("");
    }
 


}


練習問題9ー1

人間とPCがジャンケンするプログラムを作ってみましょう.クラス名は「Ex09_1」とします.

  1. 上のプログラムを参考にして,「グー,チョキ,パー」の文字が表示された3つのボタンを作り,それを押すとそれぞれ「グー,チョキ,パー」が表示されるプログラムを作ってみましょう.
    イベント処理は,例題のようにボタンごとにメソッドを用意するか,「引数」を利用して同じ一つのメソッドを使用します.「引数」を使用してどのボタンが押されたかを判別するためには,次のようにメソッドが引数を受け取るように作成することが必要です.
    例えば例題の場合に呼び出されるメソッドを「dispText()」に統一したとします.この場合呼び出すイベント処理のところで,
    btn1.setOnAction(event -> dispText("disp"));
    btn2.setOnAction(event -> dispText("clr"));
    
    のように「引数」をつけて呼び出します.そして,メソッドの定義を引数を受け取るように記述します.引数を数値にすることもできます.
    private void dispText(String s){
    	switch(s){
    		case "disp":
    			label.setText("文字が表示されました");
    		break;
    		case "clr":
    			label.setText("");
    		break;	
    	}
    }
    

    if文を使う場合,引数が文字列の場合は条件文で文字列を比較する「equals」を使用します.
    private void dispText(String s){
    	if(s.equals("disp")){
    			label.setText("文字が表示されました");
    	else{
    			label.setText("");	
    	}
    }
    
  2. 次に,コンピューターが「グー,チョキ,パー」を決めて,それを表示する部分をプログラムに加えて見ましょう.コンピューターの出す「手」は乱数を使って,数値をそれぞれの「手」に対応させて決めます.
    つぎのようにすると,0から2までの整数の乱数を発生し,変数「y」に入れます(変数名は何でも良い,各自設定する).この数値を「グー,チョキ,パー」に対応させます.
    y = (int)(Math.random()*3);
    記述する場所は,人間の手が決まった時にだけ実行したいのでイベント処理で呼び出されるメソッドの中が良いでしょう.
    同時に,人間の「手」も数値化して変数(例えば x )に代入しておきます.
  3. 最後に,「じゃんけん」の勝敗判定をして,結果を表示する部分を付け加えてみましょう.
    ヒント:人間の手を表す変数をx,コンピューターの手をyとし,つぎのような評価式を考えると,じゃんけんの勝敗を数値的に評価できる.(参考:switch文)
    (x-y+3)%3

練習問題9ー2(オプション)

「大」,「中」,「小」の3つのボタンと,光の3原色(赤,緑,青)それぞれに対応する整数(0から255まで)を入力する3つの入力欄を作り,どれかのボタンを押すと,ボタンの表示に対応した大きさの文字が,入力した整数の組合せで決まる色で表示されるプログラムを作りましょう.クリアを押したときは消去されるようにします.クラス名は「Ex09_2」とします.

色の設定は,CSSで「-fx-text-fill:rgb(赤の値,緑の値,青の値);」をそれぞれの値を「0〜255」の整数によって指定します.これを以前使用した「label.setStyle("CSSで設定")」を使って設定します.


スケジュール前のページJavaの基礎5