我正在尝试将 jpeg 图像显示到 JPanel 中的面板。我有两个面板面板和面板 1。我正在尝试在一个面板中显示图像,然后移除面板以显示另一个。
panel.g2d.drawImage(myimage, 0, 0, null);
它给了我大约 50 个错误,我无法全部输入,因为我正在手机上写这个,因为我现在没有互联网。
为什么不直接使用 aJLabel
呢?
Image image = ImageIO.read(getClass().getResource("/images/MyImage.png"));
JLabel label = new JLabel(new ImageIcon(image));
panel.add(label);
将缓冲图像与 JPanel 一起使用。这是一个例子
try{
BufferedImage myPicture = ImageIO.read(new File("c://pic.jpg"));
picLabel = new JLabel(new ImageIcon(myPicture));
picLabel.setHorizontalAlignment(SwingConstants.CENTER);
frame.getContentPane().add(picLabel);
}catch (IOException e){}
要在面板中显示图像,请覆盖该paintComponent(Graphics)
方法并将其绘制在那里:
public class ImagePanel extends JPanel {
private Image image;
public void setImage (Image image) {
this.image = image;
revalidate();
repaint();
}
@Override
protected void paintComponent (Graphics g) {
super.paintComponent(g);
if (image != null)
g.drawImage(image, 0, 0, this);
}
}
您还应该覆盖 getPreferredSize() 方法以公开您的图像组件应该有多大(将由父容器的布局管理器使用):
@Override
public Dimension getPreferredSize () {
if (image == null) {
return super.getPreferredSize();
}
Insets insets = getInsets();
return new Dimension(image.getWidth(this) + insets.left + insets.right, image.getHeight(this) + insets.top + insets.bottom);
}
编辑:( JLabel
正如其他答案所指出的)非常适合显示简单的图像或图标,但是当您需要高级功能时,例如自动放大/缩小(有或没有保持比例),平铺(x,y,两者),通常最好为此创建一个专门的图像面板类。