このブログを検索

2019年7月29日月曜日

Java入門教室 Chapter10「ボタンをクリックしたときに反応する」

「Java入門教室」

Chapter10「ボタンをクリックしたときに反応する」(Sample1004)
 ボタンをクリックした際に、「<<<ボタン1>>>」→「ボタン1をクリックした」
 とボタンのLabelの変更の処理。

 このボタンのLabelを 何回押したのか表示できるように 変更したい。
 やってみた。

⭐️Sample1004

import java.awt.*;
import java.awt.event.*;
class Main{
    public static void main(String[] args){
        MyWindow mw = new MyWindow();
    }
}

class MyWindow extends Frame implements ActionListener{
    Button btn1, btn2, btn3;
    static int btnH1 = 1;
    static int btnH2 = 1;
    static int btnH3 = 1;
    MyWindow(){
        setTitle("ボタンを判定する");
        setSize(300, 200);
        setLayout(new FlowLayout());
        btn1 = new Button("<<ボタン 1>>");
        btn1.addActionListener(this);
        add(btn1);
        btn2 = new Button("<<ボタン 2>>");
        btn2.addActionListener(this);
        add(btn2);
        btn3 = new Button("<<ボタン 3>>");
        btn3.addActionListener(this);
        add(btn3);
        setVisible(true);
        addWindowListener(new WinListener());
    }
    
    public void actionPerformed(ActionEvent e){
        if(e.getSource() == btn1){
            btn1.setLabel("ボタン1→ " + btnH1 + " 回");
            btnH1++;
        }
        if(e.getSource() == btn2){
            btn2.setLabel("ボタン2→ " + btnH2 + " 回");
            btnH2++;
        }
        if(e.getSource() == btn3){
            btn3.setLabel("ボタン3→ " + btnH3 + " 回");
            btnH3++;
        }
    }
}

class WinListener extends WindowAdapter{
    public void windowClosing(WindowEvent e){System.exit(0);}

}


↓手間取ったところ
 ボタンを何回クリックしたのか カウントする変数。
 btnH1、btnH2、btnH3の変数を クラス変数にしないと
 クリックした際の カウントが 常に初期化してしまう事。

今日の教訓
 とりあえず、やってみた。

2019年7月12日金曜日

前回の テキストプログラムを 修正。

 前回のテキスト出力プログラム を修正しました。

 前回は、初めに 何行の文章を入力しないと 入力出来ないとゆう
 トホホな 仕様で あったモノを 「END」を入力すると記入したものを、
 txt に出力するものに改良。

 初心者なので 引っかかった所は、
 if(str == "END") break; では while(true){
 の無限ループを break する事が出来ない事。
 正しくは、if(str.equals("END")) break; 

🌟前回のテキスト出力プログラムを 変更


//ファイルに出力するプログラムを作ろう。
//何行 入力しますか ← やめる
//文字を入力させて → 「END」を入力すると 入力終了
//その文字をファイルに出力
import java.io.*;

class SampleP462_3
{
    static String output_sentence; //クラス変数 出力時 出力文書
    
    public static void main(String[] args)
    {
        output_sentence = sentence(); // output_sentence クラス変数 文字入力のメソッドに移動
        System.out.println("sakubunn.txt に 出力をしました。");
        output();    //テキスト出力メソッドに移動
    }
    public static String sentence() //行の文字の入力 → inputにて入力作業 → クラス変数に返す
    {
        String str_t = ""; //統合用変数
        String str = "";
        int num = 1;       //ループ用変数(行数)
        while(true){       //while(true)は無限ループ
            str = input(num + "行目の入力です。 END(半角大文字) にて入力終了"); //inputメソッにて入力作業
            str_t += str + "\n";  //文字の統合
            num++;//行数++
            if(str.equals("END")) break;  //"END"を記入すると無限ループからbreak
            //if(str == "END") break;  //という記述は間違い
        }
        return str_t;
    }
    public static String input(String txt)  //入力メソッド(汎用) Stringで返す。
    {
        System.out.println(txt);     //txt(コメント)を表示
        BufferedReader br =                        //入力処理
         new BufferedReader(new InputStreamReader(System.in));
        String str = null;               //変数 str はこのメソッドのみ有効
        try{
            str = br.readLine();
        }
        catch(IOException e){
            System.out.println(e);
        }
        return str;
    }
    public static void output(){
        try{
            FileWriter fw = new FileWriter("sakubunn.txt");
            fw.write(output_sentence);
            fw.close();
        }
        catch(IOException e){
            System.out.println("ファイルが書き込めません。");
        }
    }

}

はてはて、今度は もっと アホ男子が喜びそうな、
プログラムに改良してみよう。

今日の教訓
 面白いモノを作ってみよう。

2019年7月11日木曜日

Java入門教室 Chapter12「テキストファイルを保存する」(Lesson12-1)

「Java入門教室」

Chapter12「テキストファイルを保存する」(Lesson12-1)
 テキストファイルに出力するプログラム。

 ただし、以前、やさしいjava 6版 で習った方法より記入が簡素だ。
 なぜだろう。
 どうしてだろう。
 ネットで 色々調べて確認。

 どうやら、FileWriterのクラスと PrintWriterのクラスとの違いらしい。

⭐️Sample1201(FileWriter)

import java.io.*;
class Main{
    public static void main(String[] args){
        try{
            FileWriter fw = new FileWriter("test.txt");
            fw.write("文字列をテキストファイルに書き込みました。");
            fw.write("追加");
            fw.write("\n");
            fw.write("1+2=" + (1+2));
            fw.close();
        }
        catch(IOException e){
            System.out.println(e);
        }
    }
}

 ↓出力されたテキストには。
 『文字列をテキストファイルに書き込みました。追加』
 『1+2=3』 と出力される。

⭐️Sample7(PrintWriter)

import java.io.*;
class Sample{
    public static void main(String[] args){
        try{
            PrintWriter pw = new PrintWriter
            (new BufferedWriter(new FileWriter("test1.txt")));
            pw.println("文字列をテキストファイルに書き込みました。");
            pw.println("追加。");
            pw.println("");
            pw.print("文字列を〜");
            pw.println("追加。");
            pw.print("文字列を" + "\n");
            pw.print("\t" + "追加。");

            pw.println("1+2=" + (1+2));
            pw.close();
        }
        catch(IOException e){
            System.out.println(e);
        }
    }

}

 ↓出力されたテキストには。
 『文字列をテキストファイルに書き込みました。』
 『追加。』
 『』
 『文字列を〜追加。』
 『文字列を』
 『文字列を』
 『     追加。1+2=3』
 と出力される。
 
 つまり FileWriterのクラスでも、PrintWriterのクラスでも
 "\n" の様な エスケープシーケンス や
 "1+2=" + (1+2) の様な 出力も出来るらしい。
 ただ、PrintlWriterのクラスでは println と print の性質の違いが
 出るんだなっと 一人で納得。

今日の教訓
 わからないところは まず 調べて 手を動かそう。