Java based learning 191 223 (exception trapping mechanism, custom exception, GUI graphical programming, Snake)

Java based learning 191 223

[Learning Video Transfer mad God said Java] (https://blog.kuangstudy.com)

Abnormal capture mechanism

Exception handling five keywords

  • try , catch , finally , throw , throws

Java object as the exception process, and defined as a base class for all exceptions java.lang.Throwable superclass. Java API has been defined in a number of exception classes, these exception classes are divided into two categories, error and exception Error Exception. Error and Exception Throwable contains two categories.

Shortcut keys ctrl + alt + t

package study.exception;

public class demo01 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try {//try监控区域
            System.out.println(a/b);
        } catch (Exception e) {//catch捕获异常
            e.printStackTrace();
        } finally {//处理善后工作
            System.out.println("Finally");
        }
    }
}

Initiative thrown exceptions, in general method using a throw, the method using throws

package study.exception;

public class test {
    public static void main(String[] args) {
        try {
            new test().Test(1, 0);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }
    }

    public void Test(int a, int b) throws ArithmeticException {
        if (b == 0) {
            throw new ArithmeticException();
        }
    }
}

Custom exception

package study.exception;
//自定义异常类
public class Myexception extends Exception {
    //传递数字大于10则抛出异常
    private int detail;
    public Myexception(int a){
        this.detail = a;
    }
    //toString :异常的打印信息
    public String toString(){
        return "Myexception{"+"detail="+detail+"}";
    }
}
package study.exception;

public class test1 {
    //可能会存在异常的方法
    static void test(int a)throws  Myexception{
        System.out.println("传递的参数为:"+a);
        if (a>10){
            throw new Myexception(a);
        }
        System.out.println("ok");
    }

    public static void main(String[] args) {
        try {
            test(11);
        } catch (Myexception e) {
            System.out.println("Myexception=>"+e);
        }
    }
}

GUI programming

AWT

  1. Frame is a top-level window
  2. Panel can not be displayed separately, you must be added to a container
  3. Layout Manager
    1. Streaming
      1. East and West
      2. form
  4. Size, positioning, background color, visibility, monitoring
  5. First think about how to write code in design, it is important is how splicing
  • Package
  • container
  • panel
  • Event Listeners
  • Text box monitor
  • Paint based paint (g)
  • Mouse Listener
  • Listener window
  • Keyboard sniffers

Swing

  • container
  • Panel (can scrollable)
  • label
    • Generic label
    • Picture tags
    • Image tag
  • Push button
    • Push button
    • Buttons with pictures
    • Single box
    • Checkbox
  • List
    • Drop-down box
    • List Box
  • Text Box
    • Plain text
    • Password box
    • Text fields

Programming ideas

  1. Custom Data
  2. Painted
  3. Monitor events
    1. keyboard
    2. event

Create Object alt + enter

Snake

package study.snake;

import javax.swing.*;
//游戏的主启动类
public class StartGame {
    public static void main(String[] args) {
        JFrame frame = new JFrame("贪吃蛇小游戏");
        frame.setBounds(10,10,900,720);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);


        //正常游戏界面应该在画板上
        frame.add(new GamePanel());
        frame.setVisible(true);
    }
}
package study.snake;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

//游戏的面板
public class GamePanel extends JPanel implements KeyListener, ActionListener {
  //定义蛇的数据结构
    int length;//蛇的长度
    int[] snakeX =new int[600];
    int[] snakeY =new int[500];
    String fx;
    //食物的坐标
    int foodx;
    int foody;
    //成绩
    int score ;
    Random random = new Random();
    //游戏当前的状态 开始,停止
    boolean isStart = false;//默认是不开始
    boolean isFail = false;//游戏失败状态判断

    //定时器  ,100ms执行一次,监视这个对象
    Timer timer = new Timer(100,this);



    //初始化,构造器
    public GamePanel(){
        init();
        this.setFocusable(true);//获得焦点事件
        this.addKeyListener(this);//获得键盘监听事件
        timer.start();//游戏一开始就开始定时
    }

    //初始化方法
    public void init(){
        length = 3;
        snakeX[0] = 100;snakeY[0] = 100;//脑袋的坐标
        snakeX[1] = 75;snakeY[1] = 100;//第一个身体的坐标
        snakeX[2] = 50;snakeY[2] = 100;//第二个身体的坐标
        fx ="R";//初始的方向向右
        //随机食物
        foodx = 25 + 25*random.nextInt(34);
        foody = 75 + 25*random.nextInt(24);

        score = 0;
    }




    //绘制面板,我们游戏中的所有东西,都是用这个画笔来画

    @Override
    public void paintComponents(Graphics g) {
        super.paintComponents(g);//清屏
        this.setBackground(Color.WHITE);
        Data.header.paintIcon(this,g,25,11);//头部广告栏画上去
        g.fillRect(25,75,850,600);

        //画食物
        Data.food.paintIcon(this,g,foodx,foody);
        //画积分
        g.setColor(Color.white);
        g.setFont(new Font("微软雅黑",Font.BOLD,18));
        g.drawString("长度"+length,750,35);
        g.drawString("分数"+score,750,50);

        //把小蛇画上去
        if (fx.equals("R")){
            Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头的坐标
        }else if (fx.equals("L")){
            Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头的坐标
        }else if (fx.equals("U")){
            Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头的坐标
        }else if (fx.equals("D")){
            Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头的坐标
        }


        for (int i = 1; i <length ; i++) {
            Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);//身体的坐标
        }

        //游戏状态
        if (isStart==false){
            g.setColor(Color.white);
            g.setFont(new Font("微软雅黑",Font.BOLD,40));
            g.drawString("按下空格开始游戏",300,300);
        }
        if (isFail){
            g.setColor(Color.RED);
            g.setFont(new Font("微软雅黑",Font.BOLD,40));
            g.drawString("失败,按下空格重新开始",300,300);
        }
    }



    @Override//键盘监听事件
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();//获得键盘按键是哪一个
        if (keyCode == KeyEvent.VK_SPACE){
            if (isFail){
                //重新开始
                isFail = false;
                init();
            }else {//如果按下的是空格键
                isStart =! isStart;//取反
            }
            repaint();
        }
        //小蛇移动
        if (keyCode==KeyEvent.VK_UP){
            fx = "U";
        }if (keyCode==KeyEvent.VK_DOWN){
            fx = "D";
        }if (keyCode==KeyEvent.VK_LEFT){
            fx = "L";
        }if (keyCode==KeyEvent.VK_RIGHT){
            fx = "R";
        }

    }


    @Override//事件监听   .....  需要通过固定事件来刷新
    public void actionPerformed(ActionEvent e) {
    if (isStart && isFail == false){//如果游戏是开始状态就让小蛇动起来
        //吃食物
        if (snakeX[0]==foodx && snakeY[0]==foody){
            //长度加一
            length++;
            score = score+10;
            //z再次随机食物
            foodx = 25 + 25*random.nextInt(34);
            foody = 75 + 25*random.nextInt(24);

        }

        for (int i = length-1; i>0; i--) {//后一节移到前一节位置
            snakeX[i] = snakeX[i-1];
            snakeY[i] = snakeY[i-1];
        }
        //走向
        if (fx.equals("R")){
            snakeX[0] = snakeX[0] +25;
            if (snakeX[0]>850){//边界判断
                snakeX[0] = 25;
            }
        }else if (fx.equals("L")){
            snakeX[0] = snakeX[0]-25;
            if (snakeX[0]<25){//边界判断
                snakeX[0] = 850;}
        }else if (fx.equals("U")){
            snakeY[0] = snakeY[0]-25;
            if (snakeY[0]<75){//边界判断
                snakeX[0] = 650;}
        }else if (fx.equals("D")){
            snakeY[0] = snakeY[0]+25;
            if (snakeX[0]>650){//边界判断
                snakeX[0] = 75;}
        }
        //失败判断,头和身体重合就死
        for (int i = 1; i <length ; i++) {
            if (snakeX[0]==snakeX[i] && snakeY[0]==snakeY[i]){
                isFail = true;
            }
        }

        repaint();//重画页面
    }
    timer.start();//定时器开启

    }
    @Override
    public void keyReleased(KeyEvent e) {

    }
    @Override
    public void keyTyped(KeyEvent e) {

    }

}
package study.snake;

import javax.swing.*;
import java.net.URL;

//数据中心
public class Data {

    //相对路径 tx.jpg
    //绝对路径  加上/
    public static URL headerURL = Data.class.getResource("statics/header.png");
    public static ImageIcon header = new ImageIcon(headerURL);

    public static URL upURL = Data.class.getResource("statics/up.png");
    public static URL downURL = Data.class.getResource("statics/down.png");
    public static URL leftURL = Data.class.getResource("statics/left.png");
    public static URL rightURL = Data.class.getResource("statics/right.png");

    public static ImageIcon up = new ImageIcon(upURL);
    public static ImageIcon down = new ImageIcon(downURL);
    public static ImageIcon left = new ImageIcon(leftURL);
    public static ImageIcon right= new ImageIcon(rightURL);

    public static URL bodyURL = Data.class.getResource("statics/body.png");
    public static ImageIcon body = new ImageIcon(bodyURL);
    public static URL foodURL = Data.class.getResource("statics/food.png");
    public static ImageIcon food = new ImageIcon(foodURL);
}

Guess you like

Origin www.cnblogs.com/litingblog/p/12088902.html