将图像绘制到JFrame中的JPanel

Mat*_*ack 9 java swing image jpanel jframe

我正在设计一个程序,在JFrame中包含两个JPanel,一个用于保存图像,另一个用于保存GUI组件(Searchfields等).我想知道如何将图像绘制到JFrame中的第一个JPanel?

以下是我的构造函数中的示例代码:

public UITester() {
    this.setTitle("Airplane");
    Container container = getContentPane();
    container.setLayout(new FlowLayout());
    searchText = new JLabel("Enter Search Text Here");
    container.add(searchText);
    imagepanel = new JPanel(new FlowLayout());
    imagepanel.paintComponents(null);
   //other constructor code
Run Code Online (Sandbox Code Playgroud)

}

public void paintComponent(Graphics g){
    super.paintComponents(g);
    g.drawImage(img[0], -50, 100, null);
}
Run Code Online (Sandbox Code Playgroud)

我试图覆盖JPanel的paintComponent方法来绘制图像,但是当我尝试编写时,这会导致我的构造函数出现问题:

imagepanel.paintComponents(null);
Run Code Online (Sandbox Code Playgroud)

因为它只允许我传递方法null,而不是Graphics g,任何人都知道修复此方法或我可以使用另一种方法在JPanel中绘制图像?感谢帮助!:)

一切顺利,并提前感谢!马特

COD*_*BOY 14

我想建议一个更简单的方法,

  image = ImageIO.read(new File(path));
  JLabel picLabel = new JLabel(new ImageIcon(image));
Run Code Online (Sandbox Code Playgroud)

Yayy!现在你的形象是摆动组件!将它添加到框架或面板或您通常做的任何事情!可能也需要重新粉刷,比如

  jpanel.add(picLabel);
  jpanel.repaint(); 
Run Code Online (Sandbox Code Playgroud)


npi*_*nti 7

您可以使用JLabel.setIcon()放置在图像上的JPanel如图所示这里.

另一方面,如果您想要一个带背景的面板,您可以查看教程.


ten*_*ica 6

无需paintComponent()从构造函数手动调用.问题是您为Graphics对象传递null .相反,覆盖paintComponent()并使用Graphics传入到将用于绘制的方法的对象.查看本教程.这是一个JPanel带图像的例子:

class MyImagePanel extends JPanel{ 
    BufferedImage image;
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        if(image != null){
            g.drawImage(image, 0, 0, this);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)