2.1 eclipse图形窗口基础使用方法

写在前面

      代码是跟随尚学堂机构高琪老师的java300集视频编写的,不是我自己写的,尊重原创。对其中使用的一些做界面的方法函数做些记录。

编程环境

      eclipse + jdk1.8

加载窗口

目的:
      给出软件的基本框架,比如标题,放大、缩小、关闭控件。
代码:

/**
 * 初始化窗口,因为继承了JFrame,this有一些属性和方法
 */
public void launchFrame(){
	this.setTitle("来源于尚学堂");	//设置标题
	this.setVisible(true);		//设置窗口为可见
	this.setLocation(50, 50); 	//设置窗口在桌面的显示位置,左上角为原点
	this.setSize(500, 500);		//设置窗口的长和宽
	
	//匿名内部类,点击关闭按钮时使程序也停止运行
	this.addWindowListener(new WindowAdapter(){
		@Override
		public void windowClosing(WindowEvent e){
			System.exit(0);	//0表示正常结束
		}
	});
}

结果:
windows

画窗口

目的:在窗口中绘制图形、图像、张贴图片。即显示实际内容。

绘制图形、图像

代码:

/**
 * 在窗口中画图形图像
 * 重写paint()方法时,第一句必须调用父类的paint()方法
 * 即必须加super.paint(g);
 */
@Override
public void paint(Graphics g){	//自动被调用。 g相当于一只画笔
	super.paint(g);		//不加这句话,图形加载不出来
	
	Color c = g.getColor();	//保存g的默认颜色
	Font f = g.getFont();	//保存g的默认字体
		
	g.setColor(Color.blue);	//设置画笔颜色为blue
	g.drawLine(50, 50, 200, 200);	//画直线
	g.setColor(Color.red);	//设置画笔颜色为red
	g.drawRect(50, 50, 200, 200);	//画矩形
	g.setColor(c);			//设置为默认颜色
	g.drawOval(50, 50, 200, 200);	//画椭圆
		
	g.setColor(Color.green);//设置为绿色
	g.fillRect(50, 50, 40, 40);		//填充一块区域,形成图像
	g.setFont(new Font("宋体",Font.BOLD,20));		//设置新字体
	g.drawString("想画就画", 100, 100);	//画字符串
		
	g.setColor(c);		//最后设置为默认颜色
	g.setFont(f);		//改为默认字体
}

结果:
windows2
注意:(1)paint(Graphics g)方法第一句添加super.paint(g);;paint(Graphics g)方法是自动调用的。(2)参数Graphics g有一些自己的属性,在代码中涉及了color和font。

张贴图片
  1. 首先建一个类,用于通过地址获取Image类型的图片。
import java.awt.Image;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

/**
 * 用于获取Image类型的图片
 * @author dxt
 *
 */
public class GameUtil {
	//工具类最好将构造器私有化
	private GameUtil(){
	}
	
	/**
	 * 指定图片的路径,返回指定路径的Image 型的图片对象
	 * @param path
	 * @return 
	 */
	public static Image getImage(String path){
		BufferedImage bi = null;
		try{
			URL u = GameUtil.class.getClassLoader().getResource(path);
			bi = ImageIO.read(u);
		}catch(IOException e){
			e.printStackTrace();
		}
		return bi;
	}
}
  1. 然后在src文件夹下建立一个images包,用来存放图片。
  2. 在画窗口的类中,声明一个Image对象ball,在paint(Graphics g)中通过g.drawImage(ball, 200, 200, null);来将图片贴到窗口上。
  3. 结果如下:
    res
使图片移动

通过不断将图片粘贴到窗口的不同位置,就实现了图片移动功能。即两个重点:不断粘贴和位置改变。对于位置改变,每次粘贴图片,都有一个粘贴位置,只要在每次粘贴完成后,改变粘贴位置,那么下次粘贴的图片就会改变位置;对于不断粘贴,我们需要建立一个线程来专门执行不断粘贴图片的操作。
代码:
在粘贴图片方法中改变位置

private int planeX = 250;
private int planeY = 250;
	
@Override
public void paint(Graphics g){
	super.paint(g);
	g.drawImage(bg, 0, 0, null);
	g.drawImage(plane, planeX, planeY, null);
	//位置改变
	planeX++;
}

建立线程处理粘贴事件:

/**
 * 内部类: 可直接使用外部的属性
 * 帮助我们反复的重画窗口
 * @author dxt
 *
 */
class PaintThread extends Thread{
	@Override
	public void run(){
		while(true){
			//通过打印repeat来测试是否是不断被调用的
			System.out.println("repeat");
			repaint();	//paint()是系统调用的,程序员只能调用repaint()重画
			//每40毫秒,画一次
			try{
				Thread.sleep(40);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
}

launchFrame方法中建立PaintThread线程,使线程启动。

//线程的开端
new PaintThread().run();
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值