无法在 JPanel 上显示图像

Posted

技术标签:

【中文标题】无法在 JPanel 上显示图像【英文标题】:Unable to display image on JPanel 【发布时间】:2016-11-03 12:38:37 【问题描述】:

这是我的代码片段:

PreparedStatement ps = con.prepareStatement("select * from patrika where jantacode = ?");
                    ps.setString(1, jComboBox1.getItemAt(jComboBox1.getSelectedIndex()));
                    ResultSet rs = ps.executeQuery();
                    rs.next();
                    jTextField2.setText(rs.getString("companycode"));
                    jTextField3.setText(rs.getString("manufacturer"));
                    jTextField4.setText(rs.getString("purchaseprice"));
                    jTextField5.setText(rs.getString("wholesaleprice"));
                    jTextField6.setText(rs.getString("retailprice"));
                    jTextField7.setText(rs.getString("location"));
                    jTextField1.setText(rs.getString("stock"));

                    //Getting and displaying image
                    Blob blob = rs.getBlob("image");
                    int blobLength = (int) blob.length();  
                    byte[] bytes = blob.getBytes(1, blobLength);
                    blob.free();
                    BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
                    Graphics2D g = img.createGraphics();
                    jPanel1.paint(g);
                    jPanel1.repaint();

一切正常,但 jPanel 无法在其上绘制图像。

同样的快照也附上。谁能帮我找出我的错误吗?

【问题讨论】:

使用JLabel 来显示图像。顺便说一句 - 上面的代码是将面板绘制到图像上,而不是将图像绘制到面板上。 正如@mKorbel 所述,请查看minimal reproducible example 上的文档。 【参考方案1】:

如果您希望将图像绘制到 JPanel,则必须覆盖其 paintComponent() 方法,因为您希望每帧都绘制它。

从文档来看,它看起来像这样:

public void paintComponent(Graphics g) 
    // Let UI Delegate paint first, which 
    // includes background filling since 
    // this component is opaque.

    super.paintComponent(g);       
    g.drawString("This is my custom Panel!",10,20);
    redSquare.paintSquare(g);

现在您加载图像并且只在面板上绘制一次。

多花点时间看文档 :) 这会很好:https://docs.oracle.com/javase/tutorial/uiswing/painting/index.html

【讨论】:

阅读 Oracle 教程 2D Graphics,部分 Working with ImagesJPanelpaint() 无关,但通过覆盖 paintComponent,并将 super.paintComponent 作为第一个代码行内:-) 答案很好,但是方法、命令成句子是错误的 @mKorbel 感谢您的修复,不记得我头顶上的正确方法名称 :) 最简单的方法是只使用 JLabel 并将 ImageIcon 添加到标签。

以上是关于无法在 JPanel 上显示图像的主要内容,如果未能解决你的问题,请参考以下文章

在 JFrame 上更改 JPanel 组件时无法显示它

如何将图像添加到 JPanel [重复]

图像未显示在 jPanel 中

JTable 不会显示在 JPanel 上

Java:保持JPanel背景图像的纵横比

JPanel.removeAll()无法正常运行