为JFrame添加背景图!!!!!!!!!!!!

smi_ling 2010-08-13 11:19:54
请问各位大侠,我想在JFrame中添加一张背景图!!
但在是JFrame中有又有一JPanel,里面以一张可以移动的图片!!
也就是说背景图上面还有一张小图片可以在背景图上面移动!!!
跪求!!!代码
...全文
209 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjjh8877227 2010-08-16
  • 打赏
  • 举报
回复
在frame里面放两个panel,第一个panel布满frame作为背景(为panel加背景,上面已经有了),第二就是你自己那个panel(可以移动的)
Tassdars 2010-08-13
  • 打赏
  • 举报
回复

import javax.swing.*;

public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(400, 300);
frame.setContentPane(new ImagePanel("Winter.jpg"));
frame.setVisible(true);
}
}



import java.awt.*;
import javax.swing.*;

public class ImagePanel extends JPanel {
private String imgPath;

public ImagePanel(String imgPath) {
this.imgPath = imgPath;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(new ImageIcon(imgPath).getImage(), 0, 0, getWidth(), getHeight(), null);
}
}


背景会随着JFrame的大小变化而变化,如果要实现重复等效果,楼主就自己画
Tassdars 2010-08-13
  • 打赏
  • 举报
回复
JFrame里面是没办法绘图的,只能在JFrame的ContentPane里面绘图,你可以自定义一个JPanel,覆盖paintComponent方法,在里面绘制背景,再把它设置为JFrame的ContentPane
huntor 2010-08-13
  • 打赏
  • 举报
回复
Swing Hacks中有两篇是添加背景图的,你可以去参考参考
luckli 2010-08-13
  • 打赏
  • 举报
回复

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;

class ImgLabel extends JLabel {
BufferedImage image,model,dest,img;
Graphics2D destG,modelG;
int posx=0,posy=0;

public ImgLabel(BufferedImage im) throws IOException {
super();
this.init(im);
}
public void init(BufferedImage im) throws IOException {
this.image = im;

dest = new BufferedImage(im.getWidth(), im.getHeight(), BufferedImage.TYPE_INT_ARGB);
this.destG = dest.createGraphics();
this.model = new BufferedImage(im.getWidth(), im.getHeight(), BufferedImage.TYPE_INT_ARGB);
this.modelG = model.createGraphics();
limpaImagem(this.model);
img = ImageIO.read(new File("图片2的路径"));

montaImagemSobreposta();
this.setIcon(new ImageIcon(dest));
}
public void limpaImagem(BufferedImage im) {
Graphics2D g2d = im.createGraphics();
g2d.setColor(Color.WHITE);
g2d.fillRect(0,0,im.getWidth(),im.getHeight());
}

private void montaImagemSobreposta() {
destG.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 1.0f));
destG.drawImage(this.image, 0, 0, null);

destG.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));
destG.drawImage(this.img, posx, posy, null);
//System.out.println(posx+" "+posy);
}

public void paintComponent(Graphics g) {
montaImagemSobreposta();
g.drawImage(dest, 0, 0, null);
}

public void mouseDragged(MouseEvent e) {
posx = e.getX();
posy = e.getY();
this.repaint();
}

}
public class Frame1 extends JFrame{
JPanel pane1 = new JPanel();
ImgLabel lab3 = null;

Frame1() throws IOException{
BufferedImage img = null;

try{
img = ImageIO.read(new File("图片1的路径"));
}
catch(IOException e){
e.printStackTrace();
}
lab3 = new ImgLabel(img);
pane1.setLayout(new BorderLayout());
pane1.add(lab3,BorderLayout.CENTER);

pane1.addMouseMotionListener(new MouseAdapter(){
public void mouseDragged(MouseEvent e) {
lab3.mouseDragged(e);

}
});

this.add(pane1);
this.setSize(300,300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) throws IOException{
Frame1 obj = new Frame1();
}
}

在路径的地方输入图片的路径,运行后按下鼠标左键拖曳鼠标时图片2会随着鼠标移动
记的要给分啊,O(∩_∩)O~

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧