通过俄罗斯方块学习Java-1

来源:互联网 发布:php 汉字长度 编辑:程序博客网 时间:2024/05/20 15:37

如何创建一个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。

构造器是有返回值的,构造器的返回值是隐式的。

原创粉丝点击