java swing图形界面捕获_Java基础学习191223(异常捕获机制,自定义异常,GUI图形化编程,贪吃蛇)...

Java基础学习191223

异常捕获机制

异常处理五个关键字

try , catch , finally , throw , throws

Java把异常当做对象来处理,并定义了一个基类java.lang.Throwable作为所有异常的超类。 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。Throwable包含Error和Exception两大类。

​快捷键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");

}

}

}

主动抛出的异常,一般在方法中使用throw,方法上使用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();

}

}

}

自定义异常

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编程

AWT

Frame 是一个顶级窗口

Panel无法单独显示,必须添加到某个容器中

布局管理器

流式

东西南北中

表格

大小,定位,背景颜色,可见性,监听

先思考如何设计在写代码,重要在于如何拼接

组件

容器

面板

事件监听

文本框监听

画图类paint(g)

鼠标监听器

窗口监听器

键盘监听器

Swing

容器

面板 (可以带滚动条的)

label

普通标签

图片标签

图像标签

按钮

普通按钮

带图片按钮

单选框

多选框

列表

下拉框

列表框

文本框

普通文本

密码框

文本域

编程思路

定义数据

画上去

监听事件

键盘

事件

创建对象alt+enter

贪吃蛇

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

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

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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值