在JPanel中调整图像大小并重新绘制图像

时间:2015-07-28 07:58:28

标签: java image swing

我正在创建一个简单的java程序来加载图像并放大/缩小图像。 到目前为止,我已经能够加载图片并进行缩放。但是在绘制缩小的图像时,我仍然可以在JPanel上看到上一张图像。

  

加载图片的代码

JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Images(jpg,png,gif)", "jpg","png","gif"));
int opt = fileChooser.showOpenDialog(this);
if(opt  == JFileChooser.APPROVE_OPTION){
    String filePath = fileChooser.getSelectedFile().getAbsolutePath();
    try {
        bufImage = ImageIO.read(fileChooser.getSelectedFile());
    } catch (IOException ex) {
        Logger.getLogger(ImageZoom.class.getName()).log(Level.SEVERE, null, ex);
    }
    image = new ImageIcon(filePath);
    imgWidth = image.getIconWidth();
    imgHeight = image.getIconHeight();

    imagePanel.getGraphics().drawImage(image.getImage(), 0, 100, image.getIconWidth(), image.getIconHeight(), imagePanel);
}
  

放大代码

double scale_factor = 1.5;
imagePanel.getGraphics().drawImage(image.getImage(), 0, 100, (int)(imgWidth*=scale_factor), (int)(imgHeight*=scale_factor), imagePanel);
  

缩小代码

double scale_factor = 0.5;
imagePanel.getGraphics().drawImage(image.getImage(), 0, 100, (int)(imgWidth*=scale_factor), (int)(imgHeight*=scale_factor), imagePanel);  

有人可以建议只在面板上放置调整大小的图像吗? 这就是缩小的样子。打开新照片时会出现同样的问题 我尝试重新绘制面板但随后一切都消失了。

This is how zooming out looks like

1 个答案:

答案 0 :(得分:2)

那是因为imagePanel.getGraphics()并不是自定义绘画在Swing中的运作方式。相反,创建一个自定义类,其类似于JPanel,并覆盖它的paintComponent方法,在那里绘制缩放图像(确保先调用super.paintComponent

有关详细信息,请参阅Painting in AWT and SwingPerforming Custom Painting

例如: