Java从事件中添加图像

标签 java image swing events user-interface

所以我正在用 GUI 制作这个程序,我没有太多地使用 Swing/SWT,但有一点了解发生了什么。

无论如何,我为按钮添加了一个 Action 监听器,因此当我单击该按钮时它会向 contentPane 添加图像,但它不起作用,除非我将它作为 JComponent(如下所示)并添加我的其他组件事后(按钮,JLabel 等)......并将此 JComponent 设置为内容 View (这没有意义)......我也尝试过让它扩展 JPanel 并清除原始内容和将它们重新添加到新的 JPanel。问题是,当我这样做时,它会以一种奇怪的方式为我的 JLabel 重新创建文本,我只知道必须有一种更简单、更高效的方式。

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();
}
}

最佳答案

  1. 不要在 paintComponent 中调用 repaint
  2. 调用super.paintComponent然后绘制图像

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

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

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

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

关于Java从事件中添加图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9183275/

相关文章:

java - struts 2中文件上传问题

java - 在 ant 中包含外部 jar

java - Java 中信号量的一般用途

html - 仅使用 css 将高度设置为宽度的比率

php - 损坏图像链接的图像占位符?

java - 变量在 Java 中不变

java - "unchangable"固定大小的 JPanel 是否可能?

java - 为什么我的时间戳在时区中移动?

Swift - 加载 PNG 而不缓存

java - 允许用户选择 JList 上的多个项目