通过俄罗斯方块学习Java-1
如何创建一个Frame
窗口
//tetris/src/ui/FrameGame.java
package ui;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class FrameGame extends JFrame{
public FrameGame(){
//设置标题
this.setTitle("Java俄罗斯方块");
//设置默认关闭属性(程序结束)此处设置为点击叉叉程序关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口的大小,用的是JFrame方法
this.setSize(1200,700);
//不允许用户改变窗口的大小
this.setResizable(false);
//不同的电脑的显示器不一样,所以居中需要根据用户不同去设置
Toolkit toolkit =Toolkit.getDefaultToolkit();//java对象Toolkit,通过静态的方法来获得参数
Dimension screen=toolkit.getScreenSize();//Toolkit获得显示器的方法,用Dimension对象来接受参数
//这个是让panel在你的像素坐标(100,100)处
//this.setLocation(100, 100);
//screem.width来接受用户显示器的宽度
//this.getWidth是窗口的宽度。相减除以2是panel居中在显示器中的像素坐标
int x=(screen.width-this.getWidth())/2;
int y=(screen.height-this.getHeight())/2-32;
this.setLocation(x,y);
//设置默认Panel
this.setContentPane(new PanelGame());
}
}
在UI中还要有一个panel,继承JPanel
///tetris/src/ui/PanelGame.java
package ui;
import java.awt.Graphics;
import java.awt.Image ;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class PanelGame extends JPanel {
public PanelGame(){
}
//java中如果你想重写父类的方法,在方法前面
//加上@Override 系统可以帮你检查方法的正确性
@Override
public void paintComponent(Graphics g){
//创建image方法。路径以工程文件为根
Image img=new ImageIcon("graphics/window/window.png").getImage();
//g.fillRect(32, 32, 32, 32);画出一个一方框
//将img现实在(32,32)像素坐标,最后的参数一般填NULL。在这个程序中比较重要
//g.drawImage(img, 32,32,null);
//0:31:15-4
int size=7;
g.drawImage(img, 64,64, 64+size, 64+size, 0, 0,size,size, null);
//从panel(0,0)切到(7,7)
//g.drawImage(img, 0, 0, 7, 7, 0, 0, 7, 7, null);
}
}
绘图部分
怎么创建image对象
Image img=new ImageIcon("graphics/window/window.png").getImage();
如何用drawImage绘制一张图
g.drawImage(img, 32,32,null);
切片图
g.drawImage(img, 0, 0,64, 64, 0, 0, 16, 16, null);
/*从panel的(0,0)坐标到(64,64)坐标放置图像。然后是从img图片的的(0,0)坐标到(16,16)*/
将window.png切片后显示在panel上面
几个坐标如下
//panel离左边的距离和上面的距离,边框额宽度是size
int size=7;
int x=32;
int y=32;
//panel上面窗口的宽度和高度
int w=256;
int h=128;
//取图片的宽度和高度
int imgW=img.getWidth(null);
int imgH=img.getHeight(null);
//左上
g.drawImage(img, x,y, x+size, y+size, 0, 0,size,size, null);
g.drawImage(img,1x,1y,2x,2y,3x,3y,4x,4y,null)
/*如果需要把size*2,携程size<<1
int w=256+(size<<1);
可以定义panel上面窗口的大小*/
将显示窗口封装一个类
每个窗口都有四个属性,那么就用到了类的概念。日常生活中的分类,把事物分成不同的东西。在JAVA中类分成不同对象(实例)。动物->咪咪,植物->小多肉,人->林志颖。panel也是一个东西。
类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,他们将会引用类的对象。类用于描述客观世界里某一类对象的共同属性,而对象则是类的具体存在,Java程序使用类的构造器来创建该类的对象。
类的定义:
[修饰符] class 类名
{
零个到多个构造器定义 //构造器用于构造该类的实例,Java语言用过new关键字来调用构造器,从而返回该类的实例。
零个到多个成员变量//成员变量用于定义该类或该类的实例所包含的状态数据
零个到多个方法。//方法用于定义该类过该类实例的行为特征或者功能实现
}
类与数组类似,不管是数组还是对象,当程序访问引用变量的成员变量或者方法时,实际上是访问引用该变量所引用的数组,对象的成员变量或者方法。
//构造器、成员和方法是类最常见的三个成员
成员变量(field)语法格式:[修饰符] 类型 成员变量名[=默认值]
{
一个特殊的关键字static
——————用来区分成员变量、方法、内部类、初始化块
static可以修饰方法、成员变量等成员,static修饰成员表明它属于这个类本身,而不属于单个实例。因此把static修饰的成员成为类变量、类方法(静态变量、静态方法)。不用static修饰的成员和方法成为实例成员、实例方法(非静态变量/方法)。
没有使用static修饰的成员变量和方法都必须使用对象来调用。
定义构造器的语法格式:
[修饰符] 构造器名(形参列表)
{
//由零条到多条可执行语句组成的构造器执行体
}
修饰符可以省略,或指定public\protected\private其中之一。不能定义为return或者void。
构造器是有返回值的,构造器的返回值是隐式的。