首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java从事件添加图像

Java从事件添加图像
EN

Stack Overflow用户
提问于 2012-02-08 04:21:54
回答 2查看 138关注 0票数 1

所以我用GUI编写了这个程序,我没有太多地使用Swing/SWT,但稍微了解一下是怎么回事。

无论如何,我为一个按钮添加了一个actionlistener,这样当我点击按钮时,它就会向contentPane中添加一个图片,但它不会工作,除非我将它作为JComponent (如下所示),并将我的其他东西(按钮、JLabel等)添加到它中,并将此JComponent设置为内容视图(这没有意义)……我也尝试过让它扩展JPanel,只需要清除原始内容,并将它们重新添加到新的JPanel中。问题是,当我这样做的时候,它会以一种奇怪的方式为我的JLabel重新创建文本,我只知道肯定有一种更简单,更有效的方法。

代码语言:javascript
运行
复制
class ShowImage extends JComponent{

    public ShowImage(){
        super();
        monkey = Toolkit.getDefaultToolkit().getImage(("D:/monkey.png"));

    }
public void paintComponent(Graphics g){
    g.drawImage(monkey, 20, 100, null);
    repaint();
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-08 04:25:08

  1. 请勿在paintComponent
  2. Invoke super.paintComponent内部调用repaint,然后绘制图像

此外,根据布局管理器的不同,此组件的首选大小为(0, 0),因此将不可见。

有关详细信息,请参阅2D Graphics

编辑-请注意,动态添加组件将迫使您重新验证容器并发出重绘请求,以便布局管理器将再次布局其组件并删除任何可视工件。此外,有关图像的更多信息,请参阅Working with Images

无论如何,最简单的方法可能是将图像设置为JLabel实例的图标,并将其添加到容器中。在这里真的没有必要重新发明轮子。

票数 4
EN

Stack Overflow用户

发布于 2012-02-08 11:14:08

代码语言:javascript
运行
复制
g.drawImage(monkey, 20, 100, this);

..would很可能已经修复了原始代码中的问题。这是一个综合问题:

  • 以异步方式加载图像。(Toolkit.getImage(),而不是ImageIO.read().)
  • Painting it to a‘Toolkit.getImage()ImageObserverJComponent实现了ImageObserver。一旦图像完全加载(以及之前的几个点),观察者就会收到通知,从而触发repaint().
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9183275

复制
相关文章

相似问题

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