首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请问如何给我的面板添加一个背景图片啊 [已结帖,结帖人:triuse]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • triuse
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-05-16 06:10:58 楼主
    想让背景漂亮些,给个思路就行.
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • java2000_net
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-05-16 06:50:291楼 得分:10
    如果先画一个图片上去,然后再画其它的是否可行。 不是太懂这个!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BD_zhu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 08:24:012楼 得分:10
    有属性是设置背景的
      自己找下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bingyuanaike
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 08:30:263楼 得分:0
    引用 2 楼 BD_zhu 的回复:
    有属性是设置背景的
      自己找下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • panxuan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 08:48:264楼 得分:0
    引用 2 楼 BD_zhu 的回复:
    有属性是设置背景的
      自己找下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kulatasana
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 09:43:465楼 得分:10
    外层容器背景一般可以设计。
    对于一般控件,重量控件重载其paint方法,轻量控件重载其paintComponent方法

    更深入的方法可以修改对应控件的默认UI
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • craky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 09:51:096楼 得分:30
    下面的东东完全可以满足你的要求,注释已经写的相当清楚了,继承自JPanel,所以可以像JPanel那样用它,然后再利用扩展的属性设置你想要的东东。

    Java code
    import java.awt.Graphics; import java.awt.Image; import javax.swing.JPanel; /** * 可设置背景图片的JPanel,提供了三种显示背景图片的方式:居中、平铺和拉伸。 * 未设置背景图片的情况下,同JPanel。 * * @author 003 */ public class JImagePane extends JPanel { private static final long serialVersionUID = -8251916094895167058L; /** * 居中 */ public static final String CENTRE = "Centre"; /** * 平铺 */ public static final String TILED = "Tiled"; /** * 拉伸 */ public static final String SCALED = "Scaled"; /** * 背景图片 */ private Image backgroundImage; /** * 背景图片显示模式 */ private String imageDisplayMode; /** * 背景图片显示模式索引(引入此属性有助于必要时扩展) */ private int modeIndex; /** * 构造一个没有背景图片的JImagePane */ public JImagePane() { this(null, CENTRE); } /** * 构造一个具有指定背景图片和指定显示模式的JImagePane * @param image 背景图片 * @param modeName 背景图片显示模式 */ public JImagePane(Image image, String modeName) { super(); setBackgroundImage(image); setImageDisplayMode(modeName); } /** * 设置背景图片 * @param image 背景图片 */ public void setBackgroundImage(Image image) { this.backgroundImage = image; this.repaint(); } /** * 获取背景图片 * @return 背景图片 */ public Image getBackgroundImage() { return backgroundImage; } /** * 设置背景图片显示模式 * @param modeName 模式名称,取值仅限于ImagePane.TILED ImagePane.SCALED ImagePane.CENTRE */ public void setImageDisplayMode(String modeName) { if(modeName != null) { modeName = modeName.trim(); //居中 if(modeName.equalsIgnoreCase(CENTRE)) { this.imageDisplayMode = CENTRE; modeIndex = 0; } //平铺 else if(modeName.equalsIgnoreCase(TILED)) { this.imageDisplayMode = TILED; modeIndex = 1; } //拉伸 else if(modeName.equalsIgnoreCase(SCALED)) { this.imageDisplayMode = SCALED; modeIndex = 2; } this.repaint(); } } /** * 获取背景图片显示模式 * @return 显示模式 */ public String getImageDisplayMode() { return imageDisplayMode; } /** * 绘制组件 * @see javax.swing.JComponent#paintComponent(Graphics) */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); //如果设置了背景图片则显示 if(backgroundImage != null) { int width = this.getWidth(); int height = this.getHeight(); int imageWidth = backgroundImage.getWidth(this); int imageHeight = backgroundImage.getHeight(this); switch(modeIndex) { //居中 case 0: { int x = (width - imageWidth) / 2; int y = (height - imageHeight) / 2; g.drawImage(backgroundImage, x, y, this); break; } //平铺 case 1: { for(int ix = 0; ix < width; ix += imageWidth) { for(int iy = 0; iy < height; iy += imageHeight) { g.drawImage(backgroundImage, ix, iy, this); } } break; } //拉伸 case 2: { g.drawImage(backgroundImage, 0, 0, width, height, this); break; } } } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • andy861025
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 09:52:197楼 得分:30
    Java code
    import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import javax.swing.JPanel; import mmlab.image.Rectangle; /** * Custom Jpanel * * @author Andy Yang */ public class FaceLabel extends JPanel { private static final long serialVersionUID = 39082560987930759L; private boolean state = false; private Rectangle rectangle = null; private Image image = null; /** 记录鼠标是否进入控件 */ private boolean hover; private String personName = null; private double photoScaled = 1.0; /** * 无参构造方法 */ public FaceLabel() { } /** * 带有Color的构造方法 * * @param color * 背景颜色 */ public FaceLabel(Image image) { this.image = image; // 定义图像尺寸 Dimension size = new Dimension(this.image.getWidth(null), this.image.getHeight(null)); setPreferredSize(size); setMinimumSize(size); setMaximumSize(size); setSize(size); setBackground(new Color(112, 112, 112)); // 定义布局方式为空 setLayout(null); } /** * 重写基类的无参构造方法 */ @Override protected void paintComponent(Graphics g) { setOpaque(true); super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.drawImage(this.getImage(), 0, 0, null); if (isState() && (getRectangle() != null)) { // JOptionPane.showMessageDialog(null,getPhotoScaled()); Rectangle rect = getRectangle(); int x = rect.x; int y = rect.y; int width = rect.width; int height = rect.height; if (getPhotoScaled() == 1.0) { g2d.setColor(new Color(255, 0, 0)); g2d.drawRect(x, y, width, height); // g2d.draw3DRect(x,y,width,height,true); g2d.setColor(new Color(255, 255, 0)); g2d.drawString(this.getPersonName(), x, y - 5); } else { String sX = String.valueOf(Math.ceil( (double) rect.x / photoScaled)); String sY = String.valueOf(Math.ceil( (double) rect.y / photoScaled)); String sW = String.valueOf(Math.ceil( (double) rect.width / photoScaled)); String sH = String.valueOf(Math.ceil( (double) rect.height / photoScaled)); int indexX = sX.indexOf("."); int indexY = sY.indexOf("."); int indexW = sW.indexOf("."); int indexH = sH.indexOf("."); x = Integer.parseInt(sX.substring(0, indexX)); y = Integer.parseInt(sY.substring(0, indexY)); width = Integer.parseInt(sW.substring(0, indexW)); height = Integer.parseInt(sH.substring(0, indexH)); g2d.setColor(new Color(255, 0, 0)); g2d.drawRect(x, y, width, height); // g2d.draw3DRect(x,y,width,height,true); g2d.setColor(new Color(0, 0, 255)); g2d.drawString(this.getPersonName(), x, y - 5); } } } public boolean isState() { return state; } public void setState(boolean state) { this.state = state; } public Rectangle getRectangle() { return rectangle; } public void setRectangle(Rectangle rectangle) { this.rectangle = rectangle; } public Image getImage() { return image; } public void setImage(Image image) { this.image = image; } public String getPersonName() { return (personName == null) ? "null" : personName; } public void setPersonName(String personName) { this.personName = personName; } public double getPhotoScaled() { return photoScaled; } public void setPhotoScaled(double photoScaled) { this.photoScaled = photoScaled; } } //这是我项目中用到的一个控件.你自己试着去改一下吧. //关键代码是: /** * 重写基类的无参构造方法 */ @Override protected void paintComponent(Graphics g) { setOpaque(true); super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.drawImage(this.getImage(), 0, 0, null); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • craky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 09:59:208楼 得分:5
    写两个六楼那个类的用法吧

    Java code
    JImagePane panel = new JImagePane(new ImageIcon("003.png").getImage(), JImagePane.SCALED); //或者 JImagePane panel = new JImagePane(); panel.setBackgroundImage(new ImageIcon("003.png").getImage()); panel.setImageDisplayMode(JImagePane.SCALED);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • XYZAHA
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-17 10:39:469楼 得分:5
    用Image
    然后读进要装载图片image = getImage(getCodeBase(),"firstImage.jpg
    最后在定义的面板上画出图片
    g.drawImage(Image,10,10,200,200,this)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Inhibitory
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-17 14:42:0910楼 得分:0
    1. 先创建一个Image对象
    2. 把这个Image画到面板上, 从(0, 0) 到(面板的width, 面板的height).

    Java code
    public class MyPanel extends JPanel { // 定义图像的引用 Image bgImage; // 步骤 1 public MyPanel() { bgImage = new ImageIcon("..../bg.png").getImage(); // 创建图像对象. } // 步骤 2 protected void paintComponent(Graphics g) { super.paintComponent(g); if (bgImage != null) { g.drawImage(bgImage, 0, 0, this.getWidgth(), this.getHeight(), null); } } }


    然后使用这个MyPanel就像使用普通的JPanel一样, 直接使用add加入组件等, 没有任何区别.
    MyPanel panel = new MyPanel();
    panel.add(new JButton("Button"));
    ..............
    修改 删除 举报 引用 回复