Java Swing 怎么自定义界面背景图片
怎么用JFileChoose在电脑中选择一张图片,确定后将图片设置问JFrame界面背景图片??高手帮忙啊,请尽量写详细的代码。谢谢!2楼的没效果啊。...我实在是做不出...
怎么用JFileChoose在电脑中选择一张图片,确定后将图片设置问JFrame界面背景图片??
高手帮忙啊,请尽量写详细的代码。谢谢!
2楼的没效果啊。...我实在是做不出了...急要啊.... 展开
高手帮忙啊,请尽量写详细的代码。谢谢!
2楼的没效果啊。...我实在是做不出了...急要啊.... 展开
4个回答
推荐于2016-04-07 · 知道合伙人互联网行家
关注
展开全部
在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);
展开全部
不要凡事都要靠别人,代码要自己写才行的。
如果你要自定义其他功能的的SWING组件,可继承相应的组件再增减功能。
对于你的要求,我可以提供一些思路:
JFrame查看JDK可以知道他是由3个面板嵌套组成,其中contentPane用于显示界面的,并且还提供了一个方法进行设置:setContenPane(Container coneainer)
显然我们可以自定义一个Panel进行替换。
在SWING中,JPanel可以做为一个基类添加自己的功能,只要继承自己的功能就可以实现了,一般组件的绘制方面的功能增加离不开paintConpenment(Graphic)
那么我们只要在绘制JPanel的后面再绘制一张图片就可以了。
如果你要自定义其他功能的的SWING组件,可继承相应的组件再增减功能。
对于你的要求,我可以提供一些思路:
JFrame查看JDK可以知道他是由3个面板嵌套组成,其中contentPane用于显示界面的,并且还提供了一个方法进行设置:setContenPane(Container coneainer)
显然我们可以自定义一个Panel进行替换。
在SWING中,JPanel可以做为一个基类添加自己的功能,只要继承自己的功能就可以实现了,一般组件的绘制方面的功能增加离不开paintConpenment(Graphic)
那么我们只要在绘制JPanel的后面再绘制一张图片就可以了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上说的对,下面是一个具体代码 ,直接拷贝运行即可查看效果
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); //在面板上绘制背景图片
}
}
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); //在面板上绘制背景图片
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把图片放在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);
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);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询