このブログを検索

2019年9月16日月曜日

アホ男子のための 学習プログラム (作成中) ⑤

「アホ男子のための 学習プログラム」

 問題を再度出題をするにはどうすれば良いか。
 とりあえず、出題は前回 作った 割り算プログラムをそのまま使用。
 前回のプログラムでは、
 ラベルの上に問題を書き、
 そのラベルを更新した。

 今回は g.drawString() を用いて記載している。

 どうやって、再度 書き直す事が出来るのか。。。

 paint(Graphics g) と記入してもダメ。
 g.drawString() と記入しても 「ハイ消えた!!」
 上記を色々組み合わせたり、色々 消したりしてもだめ。

 そんな時、閃いた。
 
 「Java入門教室」で書いてあった 謎の文章。
 repaint(); だ!!

 よく解らないけど、試しにコンパイル。
 理由は解らないけど でけた!!



⭐️ 問題を再度 表示。
//◯問題を表示させるためのclassを作成
//◯問題を表示させる
//◯ボタンを反応させる
//◯合っているかどうかの確認
//回答後ボタンを変える
import java.awt.*;
import java.awt.event.*;
class Question2{
    public static void main(String[] args){
        MyWindow mw = new MyWindow();
    }
}


class MyWindow extends Frame implements ActionListener{
    TextField tf;
    Button btn;
    int moto; //割られる数値です。
    int waru; //割る数値です。
    int ans; //答え
    static int count = 1; //出題数
    static int Correct_answer; //正解数
    int bottoncount = 1; //1→回答 2→次の問題 3→最後
    MyWindow(){
        setTitle("問題集");
        setSize(640, 400);
        setLayout(null); //レイアウトの解除
        tf = new TextField(20); //テキストフィールドのインスタンスの作成
        tf.setBounds(80, 300, 370, 30); //x,t 大きさx,y
        add(tf); //テキストフィールドの配置
        btn = new Button(); //ボタンのインスタンスの作成
        btn.addActionListener(this);
        btn.setLabel("回答");
        btn.setBounds(480, 300, 100, 35); //x,t 大きさx,y
        add(btn);//ボタンの配置
        setVisible(true);
        addWindowListener( new WinListener() );
    }
    
    public void paint(Graphics g){
        Font font1 = new Font("MS Pゴシック",Font.PLAIN, 40);
        g.setFont(font1);
        g.setColor(Color.DARK_GRAY);
        g.drawString( questions() , 80, 130);
    }
    
    public void actionPerformed(ActionEvent e){
        if(e.getSource() == btn) judgment();
    }
    
    public String questions(){ //出題するメソッド
        waru = (int)(Math.random()*40)+2; //割る数値(2〜40)
        ans = (int)(Math.random()*9)+1; //答え(1〜9)
        moto = waru * ans; //割られる数値
        System.out.println(moto + " ÷ " + waru + " = " + ans);//験算用
        return moto + " ÷ " + waru + " = ";
    }
    
    void judgment(){
        if(bottoncount == 1){
            String str = tf.getText();
            int num = 0;
            try{
                num = Integer.parseInt(str);
            }
            catch(Exception e){
                System.out.println(e); //後に消去
            }
            System.out.println(num); //試験用 入力した数値を 表示
            if (ans == num){
                stop(2000);
                tf.setText(num + "  正解だよ!!");
            }
            else if(num == 0){ //numに数値が入力されなかった場合。
                stop(2000);
                tf.setText(str + " 半角数値で入力してね。");
            }
            else{
                stop(2000);
                tf.setText(num + " はまちがい 正解は " + ans + " だよ。");
            }
            btn.setLabel("次の問題");
            bottoncount = 2;
        }
        else if(bottoncount == 2){
            tf.setText("");
            btn.setLabel("回答");
            bottoncount = 1;
            repaint();
        }
    }
   
    public void stop(int times){ //時間を止めるメソッド
        try{ Thread.sleep(times); } catch(Exception e) {}
    }
}

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

}


次はカウントとか 細かいことを あれこれ。

今日の教訓
 repaint(); をもっと調べよう。

0 件のコメント:

コメントを投稿