怎么为Java程序添加漂亮背景图片代码,通过网络搜集整理后可执行代码如下,建议以后学任何一项技术时,不要让代码夹杂着太多其它的东西: import Java.awt.*; import Javax.swing.*; public class TestBackgroundColor extends JFrame { public static void main(String[] args) { // TODO Auto-generated method stub TestBackgroundColor tbc = new TestBackgroundColor(); tbc.setVisible(true); } private JPanel imagePanel; private ImageIcon background; public TestBackgroundColor() { background = new ImageIcon("渐变背景14.png");//背景图片 JLabel label = new JLabel(background);//把背景图片显示在一个标签里面 //把标签的大小位置设置为图片刚好填充整个面板 label.setBounds(0,0,background.getIconWidth(),background.getIconHeight()); //把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 imagePanel = (JPanel)this.getContentPane(); imagePanel.setOpaque(false); //内容窗格默认的布局管理器为BorderLayout imagePanel.setLayout(new FlowLayout()); imagePanel.add(new JButton("测试按钮")); this.getLayeredPane().setLayout(null); //把背景图片添加到分层窗格的最底层作为背景 this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(background.getIconWidth(),background.getIconHeight()); this.setVisible(true); } }
不好意思,代码就这样黏贴上去,复制后会有很多空格,导致错误,下面从新给你发一遍import java.awt.FlowLayout;import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class TestBackgroundColor extends JFrame { private JPanel imagePanel; private ImageIcon background; public TestBackgroundColor(){ background = new ImageIcon("D://My Documents//图//谭健新//111.jpg");//背景图片 JLabel label = new JLabel(background);//把背景图片显示在一个标签里面 //把标签的大小位置设置为图片刚好填充整个面板 label.setBounds(0,0,background.getIconWidth(),background.getIconHeight()); //把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 imagePanel = (JPanel)this.getContentPane(); imagePanel.setOpaque(false); //内容窗格默认的布局管理器为BorderLayout imagePanel.setLayout(new FlowLayout()); imagePanel.add(new JButton("测试按钮")); this.getLayeredPane().setLayout(null); //把背景图片添加到分层窗格的最底层作为背景 this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(background.getIconWidth(),background.getIconHeight()); this.setVisible(true); } public static void main(String[] args) { // TODO Auto-generated method stub TestBackgroundColor tbc = new TestBackgroundColor(); //tbc.setVisible(true); } }
继续发import java.awt.FlowLayout;import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class TestBackgroundColor extends JFrame { private JPanel imagePanel; private ImageIcon background; public TestBackgroundColor(){ background = new ImageIcon("D://My Documents//图//谭健新//111.jpg");//背景图片 JLabel label = new JLabel(background);//把背景图片显示在一个标签里面 //把标签的大小位置设置为图片刚好填充整个面板 label.setBounds(0,0,background.getIconWidth(),background.getIconHeight()); //把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 imagePanel = (JPanel)this.getContentPane(); imagePanel.setOpaque(false); //内容窗格默认的布局管理器为BorderLayout imagePanel.setLayout(new FlowLayout()); imagePanel.add(new JButton("测试按钮")); this.getLayeredPane().setLayout(null); //把背景图片添加到分层窗格的最底层作为背景 this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(background.getIconWidth(),background.getIconHeight()); this.setVisible(true); } public static void main(String[] args) { // TODO Auto-generated method stub TestBackgroundColor tbc = new TestBackgroundColor(); //tbc.setVisible(true); } }
楼上UP可以不用重写paintComponent,太久不玩swing了,呵呵 public static void createGUI() { JFrame frame = new JFrame("Plants and Zombies"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
image = new ImageIcon("D://java/PZ/image/bg.jpg"); imgpanel = new JLabel(image); frame.getLayeredPane().add(imgpanel, new Integer(Integer.MIN_VALUE)); imgpanel.setBounds(0,0,image.getIconWidth(),image.getIconHeight()); //这里不要漏掉 MainUi mainUi=new MainUi(); frame.setContentPane(mainUi);
你自己用的布局就不对,当然覆盖了,你在最后添加了一个panel用BorderLayout,怎么会不覆盖??
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;public class MainUi extends JPanel implements ActionListener
{
protected JTextField id, psw;
protected JButton ok, register, exit;
protected JLabel idl, pswl, imgl;
protected static JLabel imgpanel;
protected ImageIcon image;
public static JPanel login;//这里改成static 类中可使用
public MainUi()
{
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
image = new ImageIcon("D:\\A.jpg");
imgpanel = new JLabel(image);
id = new JTextField(60);
id.setActionCommand("ID");
idl = new JLabel("ID :");
idl.setLabelFor(id); psw = new JTextField(60);
psw.setActionCommand("password"); pswl = new JLabel("PassWord: ");
pswl.setLabelFor(psw); ok = new JButton("OK");
register = new JButton("REGISTER");
exit = new JButton("EXIT"); login = new JPanel();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
login.setLayout(gridbag);// imgl.setBounds(0, 0, imgIcon.getIconWidth(), imgIcon.getIconHeight());
// login.setOpaque(false); JLabel[] labels = { idl, pswl };
JTextField[] textFields = { id, psw };
addLabelTextRows(labels, textFields, gridbag, login); c.gridwidth = GridBagConstraints.REMAINDER; // last
c.anchor = GridBagConstraints.WEST;
c.weightx = 1.0; login.setBorder(BorderFactory.createCompoundBorder(BorderFactory
.createTitledBorder("Text Fields"), BorderFactory
.createEmptyBorder(5, 5, 5, 5)));
// add(login, BorderLayout.CENTER); } private void addLabelTextRows(JLabel[] labels, JTextField[] textFields,
GridBagLayout gridbag, Container container)
{
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.EAST;
int numLabels = labels.length; for (int i = 0; i < numLabels; i++)
{
c.gridwidth = GridBagConstraints.RELATIVE; // next-to-last
c.fill = GridBagConstraints.NONE; // reset to defau
container.add(labels[i], c); c.gridwidth = GridBagConstraints.REMAINDER; // end row
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
container.add(textFields[i], c);
}
} @Override
public void actionPerformed(ActionEvent arg0)
{ } public static void createGUI()
{
JFrame frame = new JFrame("Plants and Zombies");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new mainUi());
frame.getContentPane().add(imgpanel,BorderLayout.NORTH);
frame.getContentPane().add(login,BorderLayout.SOUTH);//在这加login
// frame.getLayeredPane().add(imgpanel, new Integer(Integer.MIN_VALUE));
frame.pack();
frame.setSize(800, 600);
frame.setVisible(true);
} public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
UIManager.put("swing.boldMetal", Boolean.FALSE);
createGUI();
}
});
}
}
为什么不管用啊。Y.Y
我们应该以一个JPanel作为背景,然后把图片回到那上边。
下面是一个示例代码,仅供参考,希望对你有用处。public class ChessPanel extends JPanel{//继承了JPanelpublic void paintComponent(Graphics g){
super.paintComponent(g);
Toolkit kit=Toolkit.getDefaultToolkit();
Image img=kit.getImage("棋盘.jpg");//得到图片
g.drawImage(img, 0,0, null);//往JPanel上绘制图片
repaint();}
当然你需要在Main方法中生成一个这样的对象。大体就是这样,去试一下吧。祝你成功~~~~
重写一下JPanel的paintComponent就好了,另外你下面createGUIimport java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;public class MainUi extends JPanel implements ActionListener
{
protected JTextField id, psw;
protected JButton ok, register, exit;
protected JLabel idl, pswl, imgl;
/**
* 因为原来你原来就是实例变量而且不是private修饰的
* 所以我没有改成createGUI方法里的局部变量
* 因为下面要用所以image加了static修饰
*/
protected static JLabel imgpanel;
protected static ImageIcon image; public MainUi()
{
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
id = new JTextField(60);
id.setActionCommand("ID");
idl = new JLabel("ID :");
idl.setLabelFor(id); psw = new JTextField(60);
psw.setActionCommand("password"); pswl = new JLabel("PassWord: ");
pswl.setLabelFor(psw); ok = new JButton("OK");
register = new JButton("REGISTER");
exit = new JButton("EXIT"); JPanel login = new JPanel();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
login.setLayout(gridbag);// imgl.setBounds(0, 0, imgIcon.getIconWidth(), imgIcon.getIconHeight());
// login.setOpaque(false); JLabel[] labels = { idl, pswl };
JTextField[] textFields = { id, psw };
addLabelTextRows(labels, textFields, gridbag, login); c.gridwidth = GridBagConstraints.REMAINDER; // last
c.anchor = GridBagConstraints.WEST;
c.weightx = 1.0; login.setBorder(BorderFactory.createCompoundBorder(BorderFactory
.createTitledBorder("Text Fields"), BorderFactory
.createEmptyBorder(5, 5, 5, 5)));
add(login, BorderLayout.CENTER); } private void addLabelTextRows(JLabel[] labels, JTextField[] textFields,
GridBagLayout gridbag, Container container)
{
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.EAST;
int numLabels = labels.length; for (int i = 0; i < numLabels; i++)
{
c.gridwidth = GridBagConstraints.RELATIVE; // next-to-last
c.fill = GridBagConstraints.NONE; // reset to defau
container.add(labels[i], c); c.gridwidth = GridBagConstraints.REMAINDER; // end row
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
container.add(textFields[i], c);
}
} @Override
public void actionPerformed(ActionEvent arg0)
{ }
/**
* 这里重写了JPanel的paintComponent方法,目的是把图片画上去
*/
protected void paintComponent(Graphics g) {
if (ui != null) {
Graphics scratchGraphics = (g == null) ? null : g.create();
try {
ui.update(scratchGraphics, imgpanel);
}
finally {
scratchGraphics.dispose();
}
}
} public static void createGUI()
{
JFrame frame = new JFrame("Plants and Zombies");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
image = new ImageIcon("D://java/PZ/image/bg.jpg");
imgpanel = new JLabel(image);
frame.getLayeredPane().add(imgpanel, new Integer(Integer.MIN_VALUE));
imgpanel.setBounds(0,0,image.getIconWidth(),image.getIconHeight()); //这里不要漏掉
MainUi mainUi=new MainUi();
frame.getContentPane().add(mainUi);
((JPanel)frame.getContentPane()).setOpaque(false);
//frame.pack(); 既然下面设置了尺寸干嘛还要pack一下?
frame.setSize(800, 600);
frame.setVisible(true);
} public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
UIManager.put("swing.boldMetal", Boolean.FALSE);
createGUI();
}
});
}
}
import Java.awt.*;
import Javax.swing.*;
public class TestBackgroundColor extends JFrame
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
TestBackgroundColor tbc = new TestBackgroundColor();
tbc.setVisible(true);
}
private JPanel imagePanel;
private ImageIcon background;
public TestBackgroundColor()
{
background = new ImageIcon("渐变背景14.png");//背景图片
JLabel label = new JLabel(background);//把背景图片显示在一个标签里面
//把标签的大小位置设置为图片刚好填充整个面板
label.setBounds(0,0,background.getIconWidth(),background.getIconHeight());
//把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
imagePanel = (JPanel)this.getContentPane();
imagePanel.setOpaque(false);
//内容窗格默认的布局管理器为BorderLayout
imagePanel.setLayout(new FlowLayout());
imagePanel.add(new JButton("测试按钮"));
this.getLayeredPane().setLayout(null);
//把背景图片添加到分层窗格的最底层作为背景
this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(background.getIconWidth(),background.getIconHeight());
this.setVisible(true);
}
}
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestBackgroundColor extends JFrame
{
private JPanel imagePanel;
private ImageIcon background;
public TestBackgroundColor(){
background = new ImageIcon("D://My Documents//图//谭健新//111.jpg");//背景图片
JLabel label = new JLabel(background);//把背景图片显示在一个标签里面
//把标签的大小位置设置为图片刚好填充整个面板
label.setBounds(0,0,background.getIconWidth(),background.getIconHeight());
//把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
imagePanel = (JPanel)this.getContentPane();
imagePanel.setOpaque(false);
//内容窗格默认的布局管理器为BorderLayout
imagePanel.setLayout(new FlowLayout());
imagePanel.add(new JButton("测试按钮"));
this.getLayeredPane().setLayout(null);
//把背景图片添加到分层窗格的最底层作为背景
this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(background.getIconWidth(),background.getIconHeight());
this.setVisible(true);
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
TestBackgroundColor tbc = new TestBackgroundColor();
//tbc.setVisible(true);
}
}
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestBackgroundColor extends JFrame
{
private JPanel imagePanel;
private ImageIcon background;
public TestBackgroundColor(){
background = new ImageIcon("D://My Documents//图//谭健新//111.jpg");//背景图片
JLabel label = new JLabel(background);//把背景图片显示在一个标签里面
//把标签的大小位置设置为图片刚好填充整个面板
label.setBounds(0,0,background.getIconWidth(),background.getIconHeight());
//把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
imagePanel = (JPanel)this.getContentPane();
imagePanel.setOpaque(false);
//内容窗格默认的布局管理器为BorderLayout
imagePanel.setLayout(new FlowLayout());
imagePanel.add(new JButton("测试按钮"));
this.getLayeredPane().setLayout(null);
//把背景图片添加到分层窗格的最底层作为背景
this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(background.getIconWidth(),background.getIconHeight());
this.setVisible(true);
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
TestBackgroundColor tbc = new TestBackgroundColor();
//tbc.setVisible(true);
}
}
public static void createGUI()
{
JFrame frame = new JFrame("Plants and Zombies");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
image = new ImageIcon("D://java/PZ/image/bg.jpg");
imgpanel = new JLabel(image);
frame.getLayeredPane().add(imgpanel, new Integer(Integer.MIN_VALUE));
imgpanel.setBounds(0,0,image.getIconWidth(),image.getIconHeight()); //这里不要漏掉
MainUi mainUi=new MainUi();
frame.setContentPane(mainUi);
((JPanel)frame.getContentPane()).setOpaque(false);
//frame.pack(); 既然下面设置了尺寸干嘛还要pack一下?
frame.setSize(800, 600);
frame.setVisible(true);
}