JAVA在背景图片上显示标签内容的问题

qq_26318645 2015-03-15 12:35:17
我在JPanel p1面板上设置了一张背景图片,然后在另一个JPanel p2面板上添加了一张图片和一个标签,可是程序运行时,只显示p2的图片,但是不显示标签的内容。我写的代码在下面,求各位大神赐教!

import java.awt.*;

import javax.swing.*;

public class Test4 extends JFrame{
public static JLabel label , label1;
private Graphics g;
public static void main(String[] args) {
// TODO Auto-generated method stub
Test4 mg = new Test4();

}
public Test4()
{
setLocation(300,100);
setSize(319 , 427);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(true);

JPanel p1 = new JPanel();

JPanel p2 = new JPanel();

JPanel p3 = new JPanel();

ImageIcon background = new ImageIcon("F:/桌面/笨媳妇/a.jpg");
label = new JLabel(background);
label.setBounds(0,0,background.getIconWidth(),background.getIconHeight());
p1 = (JPanel)this.getContentPane();
p1.setOpaque(false);
p1.setLayout(null);
this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
this.setPreferredSize(new Dimension(background.getIconWidth(), background.getIconHeight()));

label1 = new JLabel("WO SHI LI HAO !!!");
p2.paint(g);
p2.add(label1);
add(p2 , BorderLayout.NORTH);
p1.add(label,0);
p1.add(p2,-1);

setVisible(true);
}
public void paint(Graphics g)
{
super.paint(g);
Image img = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/b.jpg"));

g.drawImage(img, 15, 80, 50, 50 , this);
}

}
...全文
956 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LuLuXL 2017-03-24
  • 打赏
  • 举报
回复
引用 5 楼 baidu_34872625 的回复:
下面的代码可以设置背景图片,已经跑过了
ImageIcon icon = new ImageIcon("001.jpg");
//把图片放在JLabel里,但是这样不方便更改图片的大小
backLabel=new JLabel(icon);
backLabel.setOpaque(false);
//这句可以把背景图放在最下面,因为LayeredPane这个面板本身在contentPane的下面,但是这个面板貌似不能添加JPanel
this.getLayeredPane().add(backLabel, new Integer(Integer.MIN_VALUE));

我也是使用的这个方法
/* 对战查询面板 */
JPanel gamePanel = new JPanel();
gamePanel.setLayout(null);

/*添加背景图片,有错误*/
ImageIcon backgroundimage1 = new ImageIcon("lolp.jpg");
JLabel backgroundLabel1 = new JLabel(backgroundimage);
backgroundLabel1.setBounds(0, 0, this.getWidth(), this.getHeight());
backgroundLabel1.setOpaque(false);
//JPanel backgroundPanel1=(JPanel)this.getContentPane();
gamePanel.add(backgroundLabel1,new Integer(Integer.MIN_VALUE));



String[] corpStrings = { "RNG", "IM", "SS", "LGD", "IG", "OMG", "EDG",
"WE", "VG", "NB", "GT" };
final JComboBox gameComboBox = new JComboBox(corpStrings);
// gameComboBox.setOpaque(true);
gameComboBox.setSelectedIndex(0);
gameComboBox.setBounds(10, 10, 120, 30);
gamePanel.add(gameComboBox);


但是运行以后,背景的图片还是会掩盖组件,当鼠标或者键盘操作的时候组件会显示出来,但是还是会消失
baidu_34872625 2016-05-16
  • 打赏
  • 举报
回复
下面的代码可以设置背景图片,已经跑过了
ImageIcon icon = new ImageIcon("001.jpg");
			//把图片放在JLabel里,但是这样不方便更改图片的大小
			backLabel=new JLabel(icon);  
			backLabel.setOpaque(false);
//这句可以把背景图放在最下面,因为LayeredPane这个面板本身在contentPane的下面,但是这个面板貌似不能添加JPanel
this.getLayeredPane().add(backLabel, new Integer(Integer.MIN_VALUE));
baidu_34872625 2016-05-16
  • 打赏
  • 举报
回复
我用的这个方法,按钮组件还是被覆盖了。 if (jContentPane == null) { jContentPane = new JPanel() { protected void paintComponent(Graphics g) { // super.paintComponent(g); ImageIcon icon = new ImageIcon("背景素材/001.jpg"); Image img = icon.getImage(); g.drawImage(img, 0, 0, 900, 600, this); } }; jContentPane.setOpaque(false); jContentPane.setLayout(null); jContentPane.add(getPaperName());//添加文本框 jContentPane.add(getOpenButton());//添加按钮
引用 3 楼 appleYQL 的回复:
这个是绘图的时候要调用paintComponent方法,用paint的话会遮住label的,建议楼主看看paint和paintComponent的区别
appleYQL 2016-05-14
  • 打赏
  • 举报
回复
这个是绘图的时候要调用paintComponent方法,用paint的话会遮住label的,建议楼主看看paint和paintComponent的区别
三仙半 2015-03-15
  • 打赏
  • 举报
回复
class MyPanel extends JPanel {

	private Image img;

	public MyPanel() {
		img = Toolkit.getDefaultToolkit().getImage("/b.jpg");

	}
	@Override
	protected void paintComponent(Graphics g) {
		// TODO Auto-generated method stub
		super.paintComponent(g);
		g.drawImage(img, 0, 0, 200, 200, this);
	}
}
三仙半 2015-03-15
  • 打赏
  • 举报
回复
要想在p2上绘制背景,你需要自定义一个类,继承JPanel,重写paint()。
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MyTest4 extends JFrame {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyTest4 mg = new MyTest4();
	}

	public MyTest4() {
		setLocation(300, 100);
		setSize(319, 427);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(true);

		MyPanel p2 = new MyPanel();
		//既然自定义类了,这个其实可以移动到MyPanel的构造方法里面去
		JLabel label = new JLabel("WO SHI LI HAO !!!");
		p2.add(label);
		this.getContentPane().add(p2, BorderLayout.CENTER);

		setVisible(true);
	}
}

58,442

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧