为什么面板中的图片显示不出来呢?

img


我这样把图片插入到窗口中可以显示,但是插入到JFrame面板中图片就显示不出来,请问是为什么呢?或者怎样在JFrame面板中添加图片呢?

你可以使用JLabel和setIcon()方法来在JFrame面板中添加图片。12 你需要先创建一个JLabel对象,然后用ImageIcon类把图片转换成图标,然后用setIcon()方法把图标设置给JLabel。1 你还需要用getPreferredSize()方法获取图片的大小,然后用setBounds()方法设置图片的位置。1 最后,你需要把JLabel对象添加到容器中。1

下面是一个示例代码:

import javax.swing.*;
import java.awt.*;

public class AddImage extends JFrame {
  public static void main(String[] args) {
    JFrame frame = new JFrame(); //JFrame Creation
    frame.setTitle("Add Image"); //Add the title to frame
    frame.setLayout(null); //Terminates default flow layout
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Terminate program on close button
    frame.setBounds(100, 200, 350, 300); //Sets the position of the frame
    Container c = frame.getContentPane(); //Gets the content layer
    JLabel label = new JLabel(); //JLabel Creation
    label.setIcon(new ImageIcon("CodeSpeedy.jpg")); //Sets the image to be displayed as an icon
    Dimension size = label.getPreferredSize(); //Gets the size of the image
    label.setBounds(50, 30, size.width, size.height); //Sets the location of the image
    c.add(label); //Adds objects to the container
    frame.setVisible(true); // Exhibit the frame
  }
}

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7472081
  • 除此之外, 这篇博客: 往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);//设置窗口可见
        }
    }