您当前的位置:首页 > 互联网教程

JAVA清除画布

发布时间:2025-05-24 20:51:27    发布人:远客网络

JAVA清除画布

一、JAVA清除画布

重绘此组件。如果组件是轻量组件,则此方法会尽快调用此组件的 paint方法。

否则此方法会尽快调用此组件的 update方法。

2.public void repaint(long tm)

//指定调用update方法之前等待的最大毫秒数tm

3.public void repaint(int x,int y,int width,int height)

4.public void repaint(ling tm,int x,int y,int width,int height)

注:repaint方法不总是马上执行,Java虽然会尽可能快的执行repaint,

当Applet运行在较慢的平台上或计算机较忙时,

应该考虑使用第2或4种repaint方法,

指定在多长时间内必须执行repaint,否则就放弃。

AWT线程--->paint()方法-->图形绘制

update()方法--->paint()方法--图形绘制

二、Java绘图机制是什么样的

JAVA的绘图功能非常丰富,绘图包括字体、颜色、图形,以下我们将分技术专题来讲。

JAVA中的任何一个图形组件,小到文本框、标签,大到一个FRAME,一个DIALOG,都有一个专门负责显示其界面的函数,这个函数名称是固定的:paint,它的原型为: public void paint(Graphics g){……}每当组件大小、位置、组件内容发生变化时,该函数即负责生成新的图形界面显示。由于该函数可以被子类继承,因此,继承的子类有能力修改该函数。如果子类中没有出现该函数,则表示其行为完全继承自父类。则不管是组件中是否添加了新的内容,是否发生了大小的改变,是否发生了位移,父类都要有一个专门的线程,来负责描绘变化以后的组件界面。 paint函数由父类自动维护,并且如果子类一旦重载该函数,必须自己去维护所有的界面显示。

任何颜色都是三原色组成(RGB),JAVA中支持224位彩色,即红绿蓝色分量可取值介于0..255之间。下面首先学习一个JAVA中的类Color Color中的常量:

public final static Color black=new Color(0,0,0);

public final static Color blue=new Color(0,0,255);

public Color(int r,int g,int b);

使用举例:如果想构造一个灰色对象,则用下面的句子:

Color gray=new Color(205,205,205);

g.setColor(color);//color是一个Color对象

每修改一次颜色它影响的就是下面所有的绘图语句,一直影响到再次碰到setColor函数才以新的颜色代替。

3、使用JColorChooser组件选择颜色 JAVA中有一个已经定义好的选色器,通过简单的语法我们就可以将该窗口调出来,从其中选择自己喜欢的颜色。下面的这个例子就是通过颜色选取器选取颜色,并将选择到的颜色做为窗体的背景色。

(1)JColorChooser简介 JColorChooser组件的showDialog()方法让用户从弹出的窗口中选择一个颜色,并传给Color对象。其调用语法如下: color=JColorChooser.showDialog(this,”选色”,color);第一个参数指定调用选色器的父窗体,第二个参数指定选色器窗口标题,最后一个为接收颜色的颜色对象。

4、如何将一个图形(以文件存在,如JPG或者GIF)画到窗体的画布中其实放置图形到画板中实际就是调用了画板的drawImage函数。其大致思路如下:首先获取一个ImageIcon对象,这个对象将会从指定的文件中读取相关图象信息,它支持GIF和JPG、BMP等基本图象格式。语法如下:

ImageIcon icon=new ImageIcon(GraExp5.class.getResource("1.gif"));

获取到图象的图标以后,就可以从图标中获取到绘制到画板上的实际需要的图象:

有了这个图象对象,我们就可以用画板的drawImage函数画图了。

三、高分悬赏Java程序,急!!!

public class ERS_Block extends Frame{

public static boolean isPlay=false;

public static int level=1,score=0;

public static TextField scoreField,levelField;

public static void main(String[] argus){

ERS_Block ers= new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent");

WindowListener win_listener= new WinListener();

ers.addWindowListener(win_listener);

setLayout(new GridLayout(1,2));

gameScr.addKeyListener(gameScr);

rightScr.setLayout(new GridLayout(2,1,0,30));

MyPanel infoScr= new MyPanel();

infoScr.setLayout(new GridLayout(4,1,0,5));

Label scorep= new Label("分数:",Label.LEFT);

Label levelp= new Label("级数:",Label.LEFT);

Label namep= new Label("姓名:张三",Label.LEFT);

Label nump= new Label("学号:110821332",Label.LEFT);

scoreField= new TextField(8);

levelField= new TextField(8);

scoreField.setEditable(false);

levelField.setEditable(false);

scorep.setSize(new Dimension(20,60));

scoreField.setSize(new Dimension(20,60));

levelp.setSize(new Dimension(20,60));

levelField.setSize(new Dimension(20,60));

MyPanel controlScr= new MyPanel();

controlScr.setLayout(new GridLayout(5,1,0,5));

Button play_b= new Button("开始游戏");

play_b.setSize(new Dimension(50,200));

play_b.addActionListener(new Command(Command.button_play,gameScr));

Button level_up_b= new Button("提高级数");

level_up_b.setSize(new Dimension(50,200));

level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));

Button level_down_b=new Button("降低级数");

level_down_b.setSize(new Dimension(50,200));

level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr));

Button pause_b=new Button("游戏暂停");

pause_b.setSize(new Dimension(50,200));

pause_b.addActionListener(new Command(Command.button_pause,gameScr));

Button quit_b= new Button("退出游戏");

quit_b.setSize(new Dimension(50,200));

quit_b.addActionListener(new Command(Command.button_quit,gameScr));

controlScr.add(level_down_b);

//重写MyPanel类,使Panel的四周留空间

return new Insets(30,50,30,50);

class GameCanvas extends Canvas implements KeyListener{

final int unitSize= 30;//小方块边长

int maxAllowRowNum;//允许有多少行未削

int blockInitRow;//新出现块的起始行坐标

int blockInitCol;//新出现块的起始列坐标

blockInitCol= columnNum/2- 2;

//初始化屏幕,并将屏幕数组清零的方法

for(int j=0; j<columnNum;j++)

public void paint(Graphics g){

for(int i= 0; i< rowNum; i++)

for(int j= 0; j< columnNum; j++)

public void drawUnit(int row,int col,int type){

switch(type){//表示画方快的方法

case 0: g.setColor(Color.black);break;//以背景为颜色画

case 1: g.setColor(Color.blue);break;//画正在下落的方块

case 2: g.setColor(Color.magenta);break;//画已经落下的方法

g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);

return b;//返回block实例的引用

//返回屏幕数组中(row,col)位置的属性值

public int getScrArrXY(int row,int col){

if(row< 0|| row>= rowNum|| col< 0|| col>= columnNum)

return(blockInitRow);//返回新块的初始行坐标

return(blockInitCol);//返回新块的初始列坐标

for(int i=0;i<rowNum;i++){

L1:for(int j=0;j<columnNum;j++)

for(int j= 0; j< columnNum; j++){

scrArr[k-1][j]= scrArr[i][j];

for(int i= k-1;i< rowNum; i++){

for(int j= 0; j< columnNum; j++){

ERS_Block.score+= full_line_num;

ERS_Block.scoreField.setText(""+ERS_Block.score);

for(int col= 0; col<columnNum; col++){

if(scrArr[maxAllowRowNum][col]!=0)

public void keyTyped(KeyEvent e){

public void keyReleased(KeyEvent e){

public void keyPressed(KeyEvent e){

case KeyEvent.VK_DOWN:b.fallDown();break;

case KeyEvent.VK_LEFT:b.leftMove();break;

case KeyEvent.VK_RIGHT:b.rightMove();break;

case KeyEvent.VK_SPACE:b.leftTurn();break;

class Command implements ActionListener{

static final int button_play= 1;//给按钮分配编号

static final int button_levelup= 2;

static final int button_leveldown= 3;

static final int button_quit= 4;

static final int button_pause= 5;

static boolean pause_resume= true;

Command(int button,GameCanvas scr){

public void actionPerformed(ActionEvent e){

case button_play:if(!ERS_Block.isPlay){

ERS_Block.scoreField.setText("0");

case button_levelup:if(ERS_Block.level< 10){

ERS_Block.levelField.setText(""+ERS_Block.level);

ERS_Block.scoreField.setText(""+ERS_Block.score);

case button_leveldown:if(ERS_Block.level> 1){

ERS_Block.levelField.setText(""+ERS_Block.level);

ERS_Block.scoreField.setText(""+ERS_Block.score);

case button_pause:if(pause_resume){

case button_quit:System.exit(0);

{0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态

{0x04e0,0x0464,0x00e4,0x04c4},

{0x4620,0x6c00,0x4620,0x6c00},

{0x2640,0xc600,0x2640,0xc600},

{0x6220,0x1700,0x2230,0x0740},

{0x6440,0x0e20,0x44c0,0x8e00},

int blockType;//块的模式号(0-6)

int turnState;//块的翻转状态(0-3)

int blockState;//快的下落状态

int row,col;//块在画布上的坐标

blockType=(int)(Math.random()* 1000)%7;

turnState=(int)(Math.random()* 1000)%4;

blockType=(int)(Math.random()* 1000)%7;

turnState=(int)(Math.random()* 1000)%4;

if(assertValid(blockType,(turnState+ 1)%4,row,col)){

if(assertValid(blockType,turnState,row,col-1)){

if(assertValid(blockType,turnState,row,col+1)){

if(assertValid(blockType,turnState,row-1,col)){

boolean assertValid(int t,int s,int row,int col){

if((int)(pattern[t][s]&k)!= 0){

int temp= scr.getScrArrXY(row-i,col+j);

public synchronized void dispBlock(int s){

if(((int)pattern[blockType][turnState]&k)!= 0){

public MyTimer(GameCanvas scr){

sleep((10-ERS_Block.level+ 1)*100);

catch(InterruptedException e){}

if(!scr.getBlock().fallDown()){

class WinListener extends WindowAdapter{

public void windowClosing(WindowEvent l){