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

smi_ling 2010-08-13 11:19:54
请问各位大侠,我想在JFrame中添加一张背景图!!
但在是JFrame中有又有一JPanel,里面以一张可以移动的图片!!
也就是说背景图上面还有一张小图片可以在背景图上面移动!!!
跪求!!!代码
...全文
203 5 打赏 收藏 转发到动态 举报
写回复
用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~
还在为基于C/S模式,使用GUI的Swing组件开发的界面排版烦恼吗,快使用可视化图形界面吧,至少各个组件的位置可以通过直接拖拽来设置,字体,大小位置,颜色等属性可以直接在界面上操作,而不用再通过写代码控制,这样设计出的界面既美观又节省了很多时间!但是不是所有版本的myEclipse软件都带有Swing组件可视化图形界面功能的,myeclipse7.0只能使用一次,myeclpse8.0也需要安装插件才可以使用。下面的就介绍一下在myeclipse8.0上安装可视化图形界面的具体步骤。(这是通过本人验证过的,如下是一步步截图说明的!据说此方法也适合myeclipse6.5,我试过,不知是什么原因,但没成功.。) myEclipse8.0添加可视化图形界面插件的方法说明: 在myEclipse8.0安装目录下的:如C:\Program Files\Genuitec\Pulse Explorer\plugins 文件里,将下载的插件包net.sf.fjep.fatjar_0.0.31.jar拷贝进该文件夹,然后再删除C:\Program Files\Genuitec\Pulse Explorer\configuration目录下除了config.ini文件外的其他文件,最后再重启电脑即可在myEclipse里使用可视化图形界面工具即Swing组件。 1.现在新建一个类(new->Other…),会在出现的如下的界面中选择MyEclipse目录下的Swing 子目录下的Matisse Form,当然,只有你插件安装成功了才会有Swing这个子目录,不安装可视化图形界面插件的话是不会有这个子目录的! 2.按如上操作点击Matisse Form会进入如下界面:输入Name:如Example ,再选择你需要的容器类型,如JFrame。然后点击Finish。 3. 你会看到包下面会生成2个文件:一个是我们新建的类Example.java ,另一个就是可视化的操作界面Example.form。 打开Example.form,注意这两个文件不可以同时打开的,你在Example.form中对界面组件的设置,在Example.java中会有相应代码自动生成!如图,你可以尽情的根据自己的需要对界面进行设计! 你可以在myeclipse中的菜单栏里打开以下3个常用工具栏:Outline ,Matisse Palette及Propertise (Window->Show view->选择上面的那3个窗口)。在Outline中,你可以看到你在这个页面上所添加的窗体,容器,组件等具体结构,你也可以在这上面对页面上的组件进行增删改!Matisse Palette里主要提供了供选择的窗体,容器,组件等,你可以选中你想要的组件然后在form里点击一下,然后拖拽设置你想要的大小和想放置的位置!选中组件直接按delete键就可以将选中的组件删除!在Propertise里你可以设置组件的一些属性,如背景颜色,字体大小,颜色,给组件添加图片等。 更多你自己去试试吧! 4.这个可视化图形界面是非常人性化的,如果你想看一下运行后会是什么效果,不必真去运行一下,只要点击form文件里的工具栏上的第三个按钮:预览 ,即可预览运行后的效果,如下图所示。
目 录 一、开发背景……………………………………………………………………….1 二、可行分析……………………………………………………………………….1 三、设计内容……………………………………………………………………….2 四、设计要求……………………………………………………………………….2 五、具体设计……………………………………………………………………….2 六、具体分工………………………………………………………………….……4 七、程序设计……………………………………………………………………….4 1、主程序模块…………………………………………………….....…........14 1、添加模块…………………………………………………….....…........14 2、删除模块……………………………………………….........………....22 4、背景框格设计……………………………………………...………......32 八、实习心得……………………………………………………………………….35 一、开发背景 在信息化不断发展的今天,社会成员相互之间联系越来越紧密,联系方式也越来越 多。我们除了手机,移动电话等常规联系方式外,现在还有了电子邮箱、MSN、QQ等信息 化的联系方式,那么为了方便我们将每个联系人的多个联系方式保存在一起,方便由于 一种联系方式联系不到某人时,可查询其他联系方式,以前的"纸质"通讯录已经越来越 赶不上信息化的速度,势必被淘汰,所以我们用所学过的知识实现一个"非纸质"通讯录 。 二、可行分析 介绍了一个简单实用的个人通讯录管理系统java工程,详细描述了本人在编程时候的编 程思想和在MyEclipse 6.5中调试运行的步骤,简明扼要地介绍了整个工程的功能和实用方法。这个个人通讯录 管理系统含有添加、删除、查找等基本功能,同时也添加了一些有趣的小功能-- 支持背景图片的更换。在程序中完成了与数据库的通信,并同样可以对数据库进行添加 、查找、删除等功能。 三、设计内容 设计GUI界面的个人通讯录,用户可以添加,删除,修改,查询,打印通讯录中的记 录! 四,设计要求 用图形用户界面实现: 1、能实现增加记录,删除记录,显示所有记录,查询记录,文件备份。 2、通讯录的功能包括:姓名,电话,Email等。 3、使用数据库做后台连接! 五、具体设计 文件分别编译生成相应的字节码(class)文件。然后,用java解释器运 行主类: 主界面 六、具体分工 我参与设计添加页面,添加方法,删除页面,查询部分操作资以及源管理模块,背景 框格布局操作。 添加界面 删除界面 七、 程序设计 1. 主程序设计模块 package com.zzk.frame; import java.awt.BorderLayout; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JToolBar; import javax.swing.SwingConstants; import javax.swing.WindowConstants; import com.swtdesigner.SwingResourceManager; import com.zzk.background.BackgroundPanel; import com.zzk.typestate.SaveTypeState; public class MainFrame extends JFrame { public MainFrame() { super(); setTitle("通讯录管理系统"); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setBounds(100,60,800,600); URL url = LoginFrame.class.getResource("/image/main.jpg"); // 获得图片的URL Image image=new ImageIcon(url).getImage(); // 创建图像对

62,614

社区成员

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

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