package LXJQ;
import javax.swing.*;
import java.awt.*;
/*
* 1.如何使用Java写出这些图形化的界面;
* GUI SWING 类库 Jframe Jpanel
* 2.让白球移动(有一定的角度移动)
* 3.让白球碰到桌壁反弹
* GUI:图形用户界面
* swing JFrame:窗体类
* Jpanel Graphics:画笔对象
* */
public class demo1 extends JFrame {
double x = 100;
double y = 100;
//弧度 = PI*角度/180°
double degree = 3.14/3;
//使用构造函数给窗体加特征
public demo1(){
//给它取一个名字
this.setTitle("天天桌球");
//窗口大小
this.setSize(660,420);
//关闭窗口时程序默认关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//窗口居中显示
this.setLocationRelativeTo(null);
this.setVisible(true);
//一直调用paint方法,循环让x,y一直变化
while (true){
repaint();
try {//使用线程捕捉异常,规定运行速度
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
//这个用于重写父类方法,用这个注解可以避免方法名跟参数写错
//将图片画到窗体上
public void paint(Graphics g) {
super.paint(g);
//将图片加载到程序中:将硬盘上的资源加载到内存中 io流
Image image = new ImageIcon("C:/Users/adnim/Desktop/table.jpg").getImage();
//画图片的 位置 图片大小
g.drawImage(image,0,30,660,390,null);
Image image1 = new ImageIcon("C:/Users/adnim/Desktop/ball1.png").getImage();
g.drawImage(image1,(int)x,(int)y,35,35,null);
//规定沿着六十度方向运行
x = x + 10*Math.cos(degree);
y = y + 10*Math.sin(degree);
//当x和y达到一定大小要改变他们的值,达到碰壁反弹效果
if(x <= 35 || x >= 660 - 35){//左右两边
degree = 3.14 - degree;//180°-当前的角度
}
if(y <= 30+35 || y >= 420-35){//上下两边Y轴方向
degree = -degree;
}
}
public static void main(String[] args) {
new demo1();//创建对象,调用上边的构造函数
}
}
目标:
JFrame容器的使用
使用Image对象加载图片
Graphics组件的使用
使用弧度控制方向的改变
必备知识:
Math.sin(x) x 的正玄值。返回值在 -1.0 到 1.0 之间;
Math.cos(x) x 的余弦值。返回的是 -1.0 到 1.0 之间的数;
这两个函数中的X 都是指的“弧度”而非“角度”,弧度的计算公式为: PI*角度/180;
需求:
桌球在球桌中按照一定 的线路和角度移动,遇到边框会自动弹回