再次提问Jframe窗体的背景图和JPanel背景图的设置方法 hinavy (风中的那滴血) 我给你的那个方法是没问题的,我做过一个Japplet的例子,代码是从我的程序里拷出来的。需要注意的是,必须 getContentPane().setLayout(null)用坐标和尺寸控制,让背景的Jlabel和JFrame的尺寸一样大,就可以了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 To:fire1_0(Steven)你藏私啊,少一句代码给我,呵,我在网上也找到了,呵,试了一下确实可以,getLayeredPane().setLayout(null);这句是什么意思?getLayeredPane()是取得分层面板,内容窗格还可以分层的吗?可以分几层呢? 原代码如下:为什么不能显示背景图呢?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); } } 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. 按你给的思路,我把代码改成如下:可是运行出来的显示是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); } } 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); }} 高分求Java调用JNI实现监听全屏鼠标事件 求教静态工厂方法的具体用法(不是设计模式中的工厂) 偶“嗷嗷待哺“的初学者!高手,大虾进来指点一二,感激不尽! 如何设计用过一次就废弃的号码 就像是手机充值 程序中的继承问题 你知道吗?一组有意思的程序! 很简单的问题,我就是想不通 我想学java,但是用什么开发平台好呢 solaris上使用JNI的问题,高分求救,在线等候 关闭Jdialog连主窗口也关了? 请JAVA SWING高手进来看一下。。还有小蚊子同学有空的话也帮看一下 @_@~ 我有如下关于数据库设计和性能的问题
你藏私啊,少一句代码给我,呵,我在网上也找到了,呵,试了一下确实可以,getLayeredPane().setLayout(null);这句是什么意思?getLayeredPane()是取得分层面板,内容窗格还可以分层的吗?可以分几层呢?
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);
}
}
getContentPane.add(LoginPanel ,0)这样就能搞定。如果你一定要用LayeredPane的话,就分别用两个LayeredPane,如层30,50,不要把东西加到ContentPane.
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);
}
}
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);
}
}