Java Swing 怎么自定义界面背景图片

怎么用JFileChoose在电脑中选择一张图片,确定后将图片设置问JFrame界面背景图片??高手帮忙啊,请尽量写详细的代码。谢谢!2楼的没效果啊。...我实在是做不出... 怎么用JFileChoose在电脑中选择一张图片,确定后将图片设置问JFrame界面背景图片??

高手帮忙啊,请尽量写详细的代码。谢谢!
2楼的没效果啊。...我实在是做不出了...急要啊....
展开
 我来答
曹晓山11
推荐于2016-04-07 · 知道合伙人互联网行家
曹晓山11
知道合伙人互联网行家
采纳数:3033 获赞数:52063
毕业南阳理工学院计算机科学与技术专业,本科学位。互联网行业从业3年工作经验,读过编程类相关书籍多本。

向TA提问 私信TA
展开全部

在java swing中需要为容器添加自定义图片或者背景图片。提供两种简单的解决方案,一种利用JPanel,另一种利用JLabel,代码如下:

1、JPanel(源代码)

package oo;  
import java.awt.Graphics;  
import java.awt.Image;  
import java.io.File;  
import javax.swing.ImageIcon;  
import javax.swing.JFrame;  
import javax.swing.JPanel;  

public class Drawing {  
  
    JFrame jframe = new JFrame();  
    public static JPanel GImage = null;  
  
    public Drawing() {  
        initFrame();  
    }  
  
    // 初始化窗口  
    public void initFrame() {  
        // 利用JPanel添加背景图片  
  
        GImage = new JPanel() {  
  
            protected void paintComponent(Graphics g) {  
                ImageIcon icon = new ImageIcon("image\\benbenla.jpg");  
                Image img = icon.getImage();  
                g.drawImage(img, 0, 0, icon.getIconWidth(),  
                        icon.getIconHeight(), icon.getImageObserver());  
                jframe.setSize(icon.getIconWidth(), icon.getIconHeight());  
  
            }  
  
        };  
        jframe.setTitle("测试背景图片");  
        jframe.add(GImage);  
        jframe.pack();  
        jframe.setVisible(true);  
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
    }  
  
    public static void main(String[] args) {  
        new Drawing();  
  
    }  
  
}

2、JLabel源代码

package swing.draw;  
import java.awt.Image;  
import javax.swing.ImageIcon;  
import javax.swing.JFrame;  
import javax.swing.JLabel; 
 
/** 利用JLabel来构建图片 */  
public class Drawing2 {  
    JLabel jlpic = new JLabel();  
    JFrame jframe = new JFrame();  
  
    public Drawing2() {  
  
        init1Frame();  
    }  
  
    public void init1Frame() {  
        ImageIcon icon = new ImageIcon("image\\benbenla.jpg");  
        icon.setImage(icon.getImage().getScaledInstance(icon.getIconWidth(),  
                icon.getIconHeight(), Image.SCALE_DEFAULT));  
        System.out.println(icon.getIconHeight() + "" + icon.getIconWidth());  
        jlpic.setBounds(0, 0, 1366, 768);  
        jlpic.setHorizontalAlignment(0);  
        jlpic.setIcon(icon);  
        jframe.setSize(1366, 768);  
        jframe.add(jlpic);  
        jframe.pack();  
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        jframe.setVisible(true);  
  
    }  
  
    public static void main(String args[]) {  
  
        new Drawing2();  
    }  
}

添加控件:

jlpic.setIcon(icon);    
Container c = new Container();  
JLabel user = new JLabel("用户:");  
JLabel password = new JLabel("密码:");  
JTextField txf_userName = new JTextField();  
JPasswordField pwd_password = new JPasswordField()  
{  
public void paste(){  
UIManager.getLookAndFeel().provideErrorFeedback(this);  
 }  
};  
user.setBounds(200,25,50,25);  
password.setBounds(200,52,50,25);  
txf_userName.setBounds(300,25,150,25);  
pwd_password.setBounds(300,52,150,25);  
c.add(user);  
c.add(txf_userName);  
c.add(password);  
c.add(pwd_password);  
c.add(jlpic);  
jframe.setSize(1366, 768);    
// jframe.add();    
jframe.add(c);
kiwwor
推荐于2017-11-23 · TA获得超过110个赞
知道答主
回答量:60
采纳率:0%
帮助的人:0
展开全部
不要凡事都要靠别人,代码要自己写才行的。
如果你要自定义其他功能的的SWING组件,可继承相应的组件再增减功能。
对于你的要求,我可以提供一些思路:
JFrame查看JDK可以知道他是由3个面板嵌套组成,其中contentPane用于显示界面的,并且还提供了一个方法进行设置:setContenPane(Container coneainer)
显然我们可以自定义一个Panel进行替换。
在SWING中,JPanel可以做为一个基类添加自己的功能,只要继承自己的功能就可以实现了,一般组件的绘制方面的功能增加离不开paintConpenment(Graphic)
那么我们只要在绘制JPanel的后面再绘制一张图片就可以了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
辰时劣人
2010-06-30 · TA获得超过117个赞
知道答主
回答量:57
采纳率:0%
帮助的人:65.2万
展开全部
楼上说的对,下面是一个具体代码 ,直接拷贝运行即可查看效果

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
@SuppressWarnings("serial")
class MyFrame extends JFrame implements ActionListener{
JButton exitB;
public MyFrame(){
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200,200);
exitB=new JButton("退出");
exitB.setToolTipText("安全退出系统");
JPanel lowerPanel=new MyPanel(); //在底部添加一个Panel
Container c=this.getContentPane();
lowerPanel.add(exitB); //pannel上添加其他组件
c.add(lowerPanel); //Frame上添加Panel
exitB.addActionListener(this);
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource()==exitB)
{
shutdown();
} }

private void shutdown() {
System.exit(0);
}

public static void main(String[]args){
new MainformFrame();
}

}

//自定义面板 继承JPanel
class MyPanel extends JPanel {
public void paintComponent(Graphics g) { // 重绘函数
Graphics2D g2 = (Graphics2D)g;
super.paintComponent(g);
Image img = Toolkit.getDefaultToolkit().getImage("bg.jpg");
g2.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); //在面板上绘制背景图片
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
niulu90
推荐于2018-02-27 · TA获得超过2472个赞
知道小有建树答主
回答量:1005
采纳率:0%
帮助的人:931万
展开全部
把图片放在JLable上,在把JButton等组件放在JPabel,设置为透明的再放在JLAbel上,最后把JLabel放在另一个JPabel上,最后放在底层容器上。setLayout(null)布局。
private JPanel pan, back;
private JTextField tfName;
private JPasswordField tfPass;
private JButton OK, Cancel; private ImageIcon ii;
private JLabel lab, users, userpassword,;
ii = new ImageIcon("图片路径");
this.setLocation(250,100);//位置
pan = new JPanel();//用来放图片
users = new JLabel("用 户:");
users.setBounds(0, 0, 90, 70);//设置JLable的大小和位置,
userpassword = new JLabel("密 码:");
userpassword.setBounds(0, 40, 90, 70);
tfName = new JTextField(20);
tfName.setBounds(90, 25, 150, 23);
tfName.setOpaque(false);// 设置为透明
tfPass = new JPasswordField(20);
tfPass.setBounds(90, 65, 150, 23);
tfPass.setOpaque(false);
OK = new JButton("登陆");
OK.setBounds(20, 150, 60, 20);
Cancel = new JButton("取消");
Cancel.setBounds(90, 150, 60, 20);
back = new JPanel();//用于放JLable和JButton,JTextField
back.setBounds(60, 140, 310, 170);
back.setLayout(null);//布局为空
back.setOpaque(false);
back.add(users);//添加组件
back.add(userpassword);
back.add(tfName);
back.add(tfPass);
back.add(OK);
back.add(Cancel);
pan.add(back);//把放有组件的容器放装图片的容器上
pan.setLayout(null);
pan.setOpaque(false);
lab = new JLabel(ii);//把图片放在JLAbel上
lab.setBounds(0, 0, ii.getIconWidth(), ii.getIconHeight());//大小由图片的大小决定
this.getLayeredPane().setLayout(null);
this.getLayeredPane().add(lab, new Integer(Integer.MIN_VALUE));
this.setContentPane(pan);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式