このブログを検索

2019年8月25日日曜日

Java入門教室 Chapter10「図形を描こう」③

「Java入門教室」

Chapter10「図形を描こう」
 色を指定して 図形を描くプログラム。

 以前、線を引くプログラムを作った際、
 色を変更する 事が出来なかった (挫折!)
 
 ↓過去
 https://nerimagooglife.blogspot.com/2019/05/java-chapter10.html
 https://nerimagooglife.blogspot.com/2019/06/blog-post.html
 
 今回、この「Java入門j教室」をポチポチとPCを打ちながら
 読み進むうちに フィールドに Color col; という
 記述が。。。
 
 何でも Colorクラスで宣言した変数には
 Color.RED など を放り込む事が出来るらしい。
 
 でもって、ポチポチっと 色を変更させてみた。

 // 注意事項 Colorクラスの変数により 色の設定ができる。
 // 注意事項 返り値は Color。
 // 注意事項 return で 指定色を返す時には "" は不要。
 // 注意事項 return で返す時には switch 分の場合は break; は不要。 


  
⭐️前回のプログラムを 少し変えてみました。

// 改良点
// ◯例外処理を try~catch に統一しよう
// ◯インデントを直そう
// ◯色を変更出来る様にしよう
// 注意事項 Colorクラスの変数により 色の設定ができる。
// 注意事項 返り値は Color。
// 注意事項 return で 色を返す時には "" は不要。
// 注意事項 return で返す時には switch 分の場合は break; は不要。
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class Line{
    public static void main(String[] args) throws IOException{
        MyWindow mw = new MyWindow();
    }
}

class MyWindow extends Frame{
    //フィールドの作成
    int startX;  // 始点X
    int startY;  // 始点Y
    int endX;    // 終点X
    int endY;    // 終点Y
    Color col;   // Colorクラスの変数
    
    MyWindow(){
        System.out.println("直線を引きます。始点と終点を入力して下さい。");
        startX = inputN("始点 X点は? (20 ~ 380 までの数値で)  "); //引数を与えて input()メソッドを呼び出す。
        startY = inputN("始点 Y点は? (20 ~ 380 までの数値で)  ");
        endX = inputN("終点 X点は? (20 ~ 380 までの数値で)  ");
        endY = inputN("終点 Y点は? (20 ~ 380 までの数値で)  ");
        col = inputC("色は? 1)BLACK 2)BLUE 3)RED 4)GREEN  ");
        
        setTitle("図形を描く");
        setSize(400, 400);
        setVisible(true);
        addWindowListener(new WinListener());
        
    }
    public void paint(Graphics g){
        g.setColor( col );
        g.drawLine(startX, startY, endX, endY);
    }
    public static int inputN(String txt){ //start end の数値の入力
        System.out.print(txt); //引数 txt の表示
        
        BufferedReader br =
         new BufferedReader(new InputStreamReader(System.in));
        int n; //try~catch外でも 変数nを使用したい為
        String str = null;
        
        try{
            str = br.readLine();
        }catch(IOException e){
            System.out.println(e);
        }
        
        try{                             //数値以外が入力された際の例外処理
            n = Integer.parseInt(str);
        }
        catch(Exception e){
            System.out.println("数値以外が入力されました。"); //数値以外の際 200をnに代入
            n = 200;
        }
        
        int num = 200;           //初期値は200
        if(n >= 20 && n <= 380) num = n; //入力した数値が 20~380の範囲内であるのか確認
        return num;
    }
    
    public static Color inputC(String txt){ //注意 返り値は Color
        System.out.print(txt); //引数 txt の表示
        
        BufferedReader br =
         new BufferedReader(new InputStreamReader(System.in));
        int n;
        String str = null;
        
        try{
            str = br.readLine();
        }catch(IOException e){
            System.out.println(e);
        }
        
        try{
            n = Integer.parseInt(str);
        }
        catch(Exception e){
            System.out.println("数値以外が入力されました。 1)BLACK 色に指定します。");
            n = 1;
        }
        
        switch(n){
            case 1:
                return Color.BLACK; // 注意””は不要!
            case 2:                 // 注意 break; は不要!
                return Color.BLUE;
            case 3:
                return Color.RED;
            case 4:
                return Color.GREEN;
            default:
                System.out.println("1~4 以外の数値が入力されました。1)BLACK 色に指定します。");
                return Color.BLACK;
        }
    }
}

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

}

今日の教訓
 重複部分があるのでスッキリさせよう。。。

0 件のコメント:

コメントを投稿