为什么第二张图片显示不出来呢?

img


我要在JFrame面板上显示两张图片,用同样的方法第一张图片可以显示出来,第二张就不行,为什么啊?

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/28653
  • 这篇博客你也可以参考下:JFrame显示透明图片与动态图片
  • 除此之外, 这篇博客: 往JFrame中添加背景图片同时不遮挡控件中的 实现方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 首先要知道JLayeredPane(层面板)是其他所有面板的父级,在JRootPane面板的上面,它再次覆盖窗体的整个表面,containPane(内容面板)是被添加到JLayeredPane上的。
    知道这个以后,只要将带有图片的标签添加到层面板,然后再将控件面板设为透明即可实现上述图片的效果,知道思路后,看下面的代码理解一下应该就OK了。

    import javax.swing.*;
    import java.awt.*;
    
    public class Frame_Test {
        public static void main(String[] args) {
            JFrame jFrame=new JFrame("打字游戏"); //创建一个窗口
            jFrame.setSize(400,600);//设置窗口大小
            jFrame.setLocationRelativeTo(null);//窗口居中
            jFrame.getContentPane().setLayout(null);//无布局,记得下面添加控件时要设置它们位置和大小
            JPanel imPanel=(JPanel) jFrame.getContentPane();//注意内容面板必须强转为JPanel才可以实现下面的设置透明
            imPanel.setOpaque(false);//将内容面板设为透明
            ImageIcon icon=new ImageIcon("src/bg.jpg");//背景图
            JLabel label = new JLabel(icon);//往一个标签中加入图片
            label.setBounds(0, 0, jFrame.getWidth(), jFrame.getHeight());//设置标签位置大小,记得大小要和窗口一样大
            icon.setImage(icon.getImage().getScaledInstance(label.getWidth(), label.getHeight(), Image.SCALE_DEFAULT));//图片自适应标签大小
            jFrame.getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE));//标签添加到层面板
    
            JLabel testword=new JLabel("测试");
            testword.setFont(new Font("方正舒体", Font.PLAIN, 30));//设置字体
            testword.setForeground(Color.white);//设置标签字体为白色
            testword.setBounds(jFrame.getWidth()/3,jFrame.getHeight()/3,jFrame.getWidth()/3,50);//设置标签位置和大小
            testword.setHorizontalAlignment(JLabel.CENTER);//设置标签文字水平居中
            jFrame.getContentPane().add(testword);//将一个标签添加到内容面板
            jFrame.setVisible(true);//设置窗口可见
        }
    }
    

setBounds四个参数分别代表 x坐标,y坐标,宽,高。你这俩JLabel应该重叠了吧。