错误代码

package game;
	
	import java.awt.event.ActionEvent;
	import java.awt.event.ActionListener;
	import java.awt.event.KeyEvent;
	import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.JButton;
	import javax.swing.JFrame;
	
	public class TestMain {
		JFrame jFrame;
		String []strings= {"a","b","c","d"};
		public static void main(String[] args) {
			// TODO 自动生成的方法存根
			TestMain testMain=new TestMain();
			testMain.initView();
		}
		
	public void initView()
	{
		
		jFrame =new JFrame();
		jFrame.setBounds(500, 500, 500, 500);
		jFrame.setLayout(null);
		
		final MyCanvas myCanvas=new MyCanvas(200,"w");//画布 
		// 这个方法只适合单一的一个字符下落
		myCanvas.setBounds(0,0, 500, 500);
		myCanvas.addKeyListener(new KeyListener() {
			//键盘事件 
			@Override
			public void keyTyped(KeyEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void keyReleased(KeyEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void keyPressed(KeyEvent e) {
				//按键响应
				// TODO 自动生成的方法存根
				char ch=e.getKeyChar();//存按下的字符;
				String string1=String.valueOf(ch);
				String string2=myCanvas.getString();
					if(string1.equals(string2))
						{
							Random random=new Random();
							int k=random.nextInt(4);
							//取出这次产生的随机整数;  0-25范围内的  取余26确保范围 而后面nextInt()里的参数就是他的极限,此时范围为0-25;
							myCanvas.setString(strings[k]);
							myCanvas.setY(200);
						}
				
			}
		});	
		
		jFrame.add(myCanvas);
		/*
		 *  不能在这里直接while 1.若不执行 显示不出图像 (顺序运行);
		 *  
		 */
		
		
		JButton jButton=new JButton("启动");
		jButton.setBounds(0, 0, 100, 100);
		/*
		 * 看不到或者不完整,就说明被图画覆盖了,这时候,我们将按钮与图形不重合即可, 我推荐的是修改图形的,因为像string这种我们并不能准确知道他的上定点
		 */
		jButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				Thread thread=new Thread(new Runnable() {
					
					@Override
			
					public void run() {
						// TODO 自动生成的方法存根
						
					while(true)
					{
						try {
							Thread.sleep(1000);
							int y=myCanvas.getY();
							y+=5;
							myCanvas.setY(y);//更新坐标
							myCanvas.repaint();
						} catch (InterruptedException e1) {
							// TODO 自动生成的 catch 块
							e1.printStackTrace();
						}
						
						
						
						try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							// TODO 自动生成的 catch 块
							e.printStackTrace();
						}
					}
					}
				});
				thread.start();
			}
		});
	
		jFrame.add(jButton);
		jFrame.setVisible(true);
	}
		
	}

子类

package game;

import java.awt.Canvas;
import java.awt.Graphics;



public class MyCanvas extends Canvas{
	//用构造函数进行初始化,但是又有局限性,写死了
	private int y=200;
	private String string;
	public MyCanvas(int y,String s) {
		// TODO Auto-generated constructor stub
		this.setY(y);
		this.setString(s);
	}
	@Override
	public void paint(Graphics g) {
		// TODO Auto-generated method stub
		super.paint(g);
		g.drawString(string,200, y);
	}
	
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	public String getString() {
		return string;
	}
	public void setString(String string) {
		this.string = string;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值