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

[复制链接]
查看11 | 回复6 | 2021-1-27 06:49:20 | 显示全部楼层 |阅读模式
我在JPanelp1面板上设置了一张背景图片,然后在另一个JPanelp2面板上添加了一张图片和一个标签,可是程序运行时,只显示p2的图片,但是不显示标签的内容。我写的代码在下面,求各位大神赐教!
importjava.awt.*;
importjavax.swing.*;
publicclassTest4extendsJFrame{
publicstaticJLabellabel,label1;
privateGraphicsg;
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Test4mg=newTest4();
}
publicTest4()
{
setLocation(300,100);
setSize(319,427);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(true);
JPanelp1=newJPanel();
JPanelp2=newJPanel();
JPanelp3=newJPanel();
ImageIconbackground=newImageIcon("F:/桌面/笨媳妇/a.jpg");
label=newJLabel(background);
label.setBounds(0,0,background.getIconWidth(),background.getIconHeight());
p1=(JPanel)this.getContentPane();
p1.setOpaque(false);
p1.setLayout(null);
this.getLayeredPane().add(label,newInteger(Integer.MIN_VALUE));
this.setPreferredSize(newDimension(background.getIconWidth(),background.getIconHeight()));
label1=newJLabel("WOSHILIHAO!!!");
p2.paint(g);
p2.add(label1);
add(p2,BorderLayout.NORTH);
p1.add(label,0);
p1.add(p2,-1);
setVisible(true);
}
publicvoidpaint(Graphicsg)
{
super.paint(g);
Imageimg=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/b.jpg"));
g.drawImage(img,15,80,50,50,this);
}
}
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:49:20 | 显示全部楼层
要想在p2上绘制背景,你需要自定义一个类,继承JPanel,重写paint()。
importjava.awt.BorderLayout;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.Toolkit;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
publicclassMyTest4extendsJFrame{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
MyTest4mg=newMyTest4();
}
publicMyTest4(){
setLocation(300,100);
setSize(319,427);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(true);
MyPanelp2=newMyPanel();
//既然自定义类了,这个其实可以移动到MyPanel的构造方法里面去
JLabellabel=newJLabel("WOSHILIHAO!!!");
p2.add(label);
this.getContentPane().add(p2,BorderLayout.CENTER);
setVisible(true);
}
}
回复

使用道具 举报

千问 | 2021-1-27 06:49:20 | 显示全部楼层
classMyPanelextendsJPanel{
privateImageimg;
publicMyPanel(){
img=Toolkit.getDefaultToolkit().getImage("/b.jpg");
}
@Override
protectedvoidpaintComponent(Graphicsg){
//TODOAuto-generatedmethodstub
super.paintComponent(g);
g.drawImage(img,0,0,200,200,this);
}
}

回复

使用道具 举报

千问 | 2021-1-27 06:49:20 | 显示全部楼层
这个是绘图的时候要调用paintComponent方法,用paint的话会遮住label的,建议楼主看看paint和paintComponent的区别
回复

使用道具 举报

千问 | 2021-1-27 06:49:20 | 显示全部楼层
我用的这个方法,按钮组件还是被覆盖了。
if(jContentPane==null){
jContentPane=newJPanel(){
protectedvoidpaintComponent(Graphicsg){
//
super.paintComponent(g);
ImageIconicon=newImageIcon("背景素材/001.jpg");
Imageimg=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的区别
回复

使用道具 举报

千问 | 2021-1-27 06:49:20 | 显示全部楼层
下面的代码可以设置背景图片,已经跑过了
ImageIconicon=newImageIcon("001.jpg");
//把图片放在JLabel里,但是这样不方便更改图片的大小
backLabel=newJLabel(icon);
backLabel.setOpaque(false);
//这句可以把背景图放在最下面,因为LayeredPane这个面板本身在contentPane的下面,但是这个面板貌似不能添加JPanel
this.getLayeredPane().add(backLabel,newInteger(Integer.MIN_VALUE));

回复

使用道具 举报

千问 | 2021-1-27 06:49:20 | 显示全部楼层
引用5楼baidu_34872625的回复:下面的代码可以设置背景图片,已经跑过了
ImageIconicon=newImageIcon("001.jpg");
//把图片放在JLabel里,但是这样不方便更改图片的大小
backLabel=newJLabel(icon);
backLabel.setOpaque(false);
//这句可以把背景图放在最下面,因为LayeredPane这个面板本身在contentPane的下面,但是这个面板貌似不能添加JPanel
this.getLayeredPane().add(backLabel,newInteger(Integer.MIN_VALUE));

我也是使用的这个方法
/*对战查询面板*/
JPanelgamePanel=newJPanel();
gamePanel.setLayout(null);
/*添加背景图片,有错误*/
ImageIconbackgroundimage1=newImageIcon("lolp.jpg");
JLabelbackgroundLabel1=newJLabel(backgroundimage);
backgroundLabel1.setBounds(0,0,this.getWidth(),this.getHeight());
backgroundLabel1.setOpaque(false);
//JPanelbackgroundPanel1=(JPanel)this.getContentPane();
gamePanel.add(backgroundLabel1,newInteger(Integer.MIN_VALUE));

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

但是运行以后,背景的图片还是会掩盖组件,当鼠标或者键盘操作的时候组件会显示出来,但是还是会消失
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行