JFrame中绘制图片做背景
来源:互联网 发布:手机淘宝怎么看好评率 编辑:程序博客网 时间:2024/05/16 08:50
来源于问问 原网址:http://wenwen.soso.com/z/q194392780.htm
问题: 希望把一张图片绘制到JFrame中,代码如下,但是不成功,后面提供了两种 方法解决这个问题
import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JFrame;public class GameFrame extends JFrame implements MouseListener { int width = Toolkit.getDefaultToolkit().getScreenSize().width; //获得屏幕宽带 int height = Toolkit.getDefaultToolkit().getScreenSize().height; //获得屏幕高度 //背景初始化 BufferedImage bgImage = null; public GameFrame(){ this.setTitle("五子棋"); //标题 this.setSize(500, 500); //窗体大小 this.setLocation((width-500)/2, (height-500)/2); //窗体初始位置 this.setResizable(false); //是否可改变窗体大小 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置退出状态 this.setVisible(true); //设置窗体是否可见 try { bgImage = ImageIO.read(new File("F:/image/background.jpg")); } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } } public void paint(Graphics g){ super.paint(g); g = bgImage.getGraphics(); g.drawImage(bgImage, 0, 0, this); } public void mouseClicked(MouseEvent e) { // TODO 自动生成方法存根 } public void mouseEntered(MouseEvent e) { // TODO 自动生成方法存根 } public void mouseExited(MouseEvent e) { // TODO 自动生成方法存根 } public void mousePressed(MouseEvent e) { // TODO 自动生成方法存根 } public void mouseReleased(MouseEvent e) { // TODO 自动生成方法存根 }}
方法一:
首先,修改paint()方法
public void paint(Graphics g) { super.paint(g);// g = bgImage.getGraphics();//这句话连画布都改了,下面画的东西都不会在屏幕上显示//而是在bgImage里进行绘制,所以下面的东西都显示不出来,应该删掉这句 g.drawImage(bgImage, 0, 0, this); }
其次,修改加载图片的语句
bgImage = ImageIO.read(new File("F:/image/background.jpg"));
分析: 之所以没有显示,是因为ImageIO.read方法是在和主程序并行进行的线程里完成的,很可能你的图片还没加载完图片就已经显示主界面了,所以正确的方法是等待图片加载完再进行显示。这里要用到MediaTracker类。要引入包import java.awt.MediaTracker;
代码修改:
//将bgImage = ImageIO.read(new File("F:/image/background.jpg"));替换为下面代码try { MediaTracker tracker = new MediaTracker(this); //创建一个图片跟踪器 bgImage = ImageIO.read(new File("F:/pictures/ForFun/0.jpg")); tracker.addImage(bgImage, 0);//跟踪该缓冲图片,id设为0 tracker.waitForID(0);//这句会一直等待到id为0的图片加载完毕或出错为止 } catch (InterruptedException e) { } catch (IOException e) { e.printStackTrace(); } repaint();//不要忘了这句,因为前面的ImageIO.read()方法可能会调用paint方法,所以没有这句的话可能主界面还是在加载前就绘制完毕了
方法二:
只要修改paint( )方法,
public void paint(Graphics g) { super.paint(g); if(bgImage==null){ try { bgImage = ImageIO.read(new File("F:/pictures/MyFavorites/fish.bmp")); } catch (IOException e) { e.printStackTrace(); } } g.drawImage(bgImage, 0, 0, this); }
- JFrame中绘制图片做背景
- java编程过程中中如何在JFrame面板添加图片作为背景
- JFrame中设置窗口图片
- java中JFrame去掉边框设置背景
- UsePngDrawBK图片做背景
- GDI+(绘制图片背景文字)
- android拉伸图片做背景
- svg 使用图片做背景
- android绘制背景平铺Bitmap图片
- J2ME游戏中地图,背景的绘制 --- 图片切割的应用
- cocos2d-x中Texture2D::TexParams(图片平铺)一张图片铺满全屏做背景
- Java Swing ,如何在Jframe中加入图片
- 如何使用图片做DLG背景
- 关于HTML怎样用图片做背景
- WPF使用一张图片平铺做背景
- 用图片做按钮和背景
- android 从asserts 读取图片做背景
- 关于HTML怎样用图片做背景
- 代理与动态代理
- cocos2d-x 在新thread中调用opengles绘制函数会出错
- Java web(2012/2/21)
- Micro SD 卡(TF卡) spi 模式实现方法
- 01_Android应用开发环境搭建【图解】
- JFrame中绘制图片做背景
- Http chunked协议
- No 124 · win7无线网共享方法
- 夏令时 DST (Daylight Saving Time) java中的夏令时。
- refer_01
- 黑莓9780(BB9780)UD Caller 显示坐标
- 递归应用-全排列
- ASP.NET中利用Repeater实现增删改操作
- Group By子句的用法