无法在 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 Images
,JPanel
与 paint()
无关,但通过覆盖 paintComponent
,并将 super.paintComponent
作为第一个代码行内:-)
答案很好,但是方法、命令成句子是错误的
@mKorbel 感谢您的修复,不记得我头顶上的正确方法名称 :)
最简单的方法是只使用 JLabel 并将 ImageIcon 添加到标签。以上是关于无法在 JPanel 上显示图像的主要内容,如果未能解决你的问题,请参考以下文章