hinavy (风中的那滴血) 我给你的那个方法是没问题的,我做过一个Japplet的例子,代码是从我的程序里拷出来的。需要注意的是,必须 getContentPane().setLayout(null)用坐标和尺寸控制,让背景的Jlabel和JFrame的尺寸一样大,就可以了。

解决方案 »

  1.   

    To:fire1_0(Steven)
    你藏私啊,少一句代码给我,呵,我在网上也找到了,呵,试了一下确实可以,getLayeredPane().setLayout(null);这句是什么意思?getLayeredPane()是取得分层面板,内容窗格还可以分层的吗?可以分几层呢?
      

  2.   

    原代码如下:为什么不能显示背景图呢?
    import java.awt.*;
    import javax.swing.*;public class MainFrame
    {
    public static void main(String[] args)
    {
    MFrame newFrame = new MFrame();
    newFrame.getLayeredPane().setLayout(null);
    newFrame.getLayeredPane().add(new PicPanel(),new Integer(Integer.MIN_VALUE));
    newFrame.setDefaultCloseOperation(newFrame.EXIT_ON_CLOSE);
    newFrame.show();
    newFrame.setVisible(true);
    }
    }class MFrame extends JFrame
    {
    private JPanel Content;
    public MFrame()
    {
    Content = (JPanel)getContentPane();

    setTitle("明日之星");
    setBounds(100,100,300,200);
    //setResizable(false);
    //add(new PicPanel());
    Content.setOpaque(false);  //设内容窗格为透明。。
    Content.setLayout(new FlowLayout());
    Content.add(new LoginPanel());
    Content.add(new JButton("确认"));
    }
    }class PicPanel extends JPanel
    {
    public PicPanel()
    {
    //把图片显示在标签里
    JLabel picLabel = new JLabel();
    picLabel.setIcon(new ImageIcon("banner.gif"));
    picLabel.setBounds(0,0,300,200);
    setOpaque(false);
    add(picLabel);
    }
    }class LoginPanel extends JPanel
    {
    public LoginPanel()
    {
    JLabel loginLabel = new JLabel();
    loginLabel.setText("用户名:");
    //loginLabel.setBounds(0,0,300,200);
    add(loginLabel);
    }
    }
      

  3.   

    newFrame.getLayeredPane().add(new PicPanel(),new Integer(Integer.MIN_VALUE));你用到了JLayeredPane,虽然你把LayeredPane的设置为最底层,但是注意JFrame的ContentPane才是真正的最底层,LayeredPane是不可能被设置成比ContentPane低的,我试过。我给你的思路是将所有组件都加在ContentPane上,但是用ContentPane的 Z order来决定层次关系。getContentPane.add(PicPanel,-1)
    getContentPane.add(LoginPanel ,0)这样就能搞定。如果你一定要用LayeredPane的话,就分别用两个LayeredPane,如层30,50,不要把东西加到ContentPane.
      

  4.   

    按你给的思路,我把代码改成如下:可是运行出来的显示是JLabel和JButton在上面,图片挤到下面去了,而不是作为背景。。不知道下面的代码哪儿还有没设置好的import java.awt.*;
    import javax.swing.*;public class MainFrame
    {
    public static void main(String[] args)
    {
    MFrame newFrame = new MFrame();
    newFrame.setDefaultCloseOperation(newFrame.EXIT_ON_CLOSE);
    newFrame.show();
    newFrame.setVisible(true);
    }
    }class MFrame extends JFrame
    {
    private JPanel Content;
    public MFrame()
    {
    Content = (JPanel)getContentPane();

    setTitle("财务之星");
    setBounds(100,100,300,200);
    //setResizable(false);
    Content.setOpaque(false);  //设内容窗格为透明。。
    Content.setLayout(new FlowLayout());

    Content.add(new PicPanel(),-1);
    Content.add(new LoginPanel(),0);
    Content.add(new JButton("确认"),0);

    }
    }class PicPanel extends JPanel
    {
    public PicPanel()
    {
    //把图片显示在标签里
    JLabel picLabel = new JLabel();
    picLabel.setIcon(new ImageIcon("pic.jpg"));
    picLabel.setBounds(0,0,300,200);
    setOpaque(false);
    add(picLabel);
    }
    }class LoginPanel extends JPanel
    {
    public LoginPanel()
    {
    JLabel loginLabel = new JLabel();
    loginLabel.setText("用户名:");
    //loginLabel.setBounds(0,0,300,200);
    add(loginLabel);
    }
    }
      

  5.   

    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.IOException;import javax.imageio.ImageIO;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class BackgroundFrame extends JFrame {
    private Image bgImg = null;

    public BackgroundFrame(String title, Image backgroundImg) 
    {
    super(title);
    this.bgImg = backgroundImg; JPanel contentPane = new JPanel(new BorderLayout()) { protected void paintComponent(Graphics g)
    {
    super.paintComponent(g); g.drawImage(bgImg, 0, 0, getWidth(), getHeight(), this);
    }
    };
    getRootPane().setContentPane(contentPane);
    } public static void main(String[] args) throws IOException
    {
    Image bgImg = ImageIO.read(BackgroundFrame.class.getResource("menubg.png")); JFrame f = new BackgroundFrame("BGTest", bgImg);
    f.getContentPane().setLayout(new FlowLayout());
    f.getContentPane().add(new JButton("Test"), BorderLayout.CENTER);
    f.setSize(400, 400);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }