所以我正在用 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();
}
}
最佳答案
- 不要在
paintComponent
中调用repaint
- 调用
super.paintComponent
然后绘制图像
此外,根据布局管理器,此组件的首选大小为 (0, 0)
,因此将不可见。
有关详细信息,请参阅 2D Graphics .
编辑 - 请注意,动态添加组件将强制您重新验证容器并发出重绘请求,以便布局管理器将再次布局其组件并删除任何视觉工件。此外,有关图像的更多信息,请参阅 Working with Images .
无论如何,最简单的方法可能是将图像设置为 JLabel
实例的图标并将其添加到容器中。真的没有必要在这里重新发明轮子。
关于Java从事件中添加图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9183275/