首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整JPanel中的图像大小并重新绘制图像

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

Stack Overflow用户
提问于 2015-07-28 07:58:28
回答 1查看 829关注 0票数 0

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

加载图像的代码

代码语言:javascript
复制
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);
}

放大代码

代码语言:javascript
复制
double scale_factor = 1.5;
imagePanel.getGraphics().drawImage(image.getImage(), 0, 100, (int)(imgWidth*=scale_factor), (int)(imgHeight*=scale_factor), imagePanel);

放大码

代码语言:javascript
复制
double scale_factor = 0.5;
imagePanel.getGraphics().drawImage(image.getImage(), 0, 100, (int)(imgWidth*=scale_factor), (int)(imgHeight*=scale_factor), imagePanel);  

有人可以建议一种方法,只有调整大小的图像在面板上吗?

这就是放大的样子。打开新图片时也会出现同样的问题。

我试着重新粉刷面板,但后来一切都消失了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-28 08:09:09

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

有关详细信息,请参阅AWT和Swing中的绘画表演定制绘画

例如:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31670518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档