所以我用GUI编写了这个程序,我没有太多地使用Swing/SWT,但稍微了解一下是怎么回事。
无论如何,我为一个按钮添加了一个actionlistener,这样当我点击按钮时,它就会向contentPane中添加一个图片,但它不会工作,除非我将它作为JComponent (如下所示),并将我的其他东西(按钮、JLabel等)添加到它中,并将此JComponent设置为内容视图(这没有意义)……我也尝试过让它扩展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();
}
}发布于 2012-02-08 04:25:08
paintComponentsuper.paintComponent内部调用repaint,然后绘制图像此外,根据布局管理器的不同,此组件的首选大小为(0, 0),因此将不可见。
有关详细信息,请参阅2D Graphics。
编辑-请注意,动态添加组件将迫使您重新验证容器并发出重绘请求,以便布局管理器将再次布局其组件并删除任何可视工件。此外,有关图像的更多信息,请参阅Working with Images。
无论如何,最简单的方法可能是将图像设置为JLabel实例的图标,并将其添加到容器中。在这里真的没有必要重新发明轮子。
发布于 2012-02-08 11:14:08
g.drawImage(monkey, 20, 100, this);..would很可能已经修复了原始代码中的问题。这是一个综合问题:
Toolkit.getImage(),而不是ImageIO.read().)Toolkit.getImage()’ImageObserver。JComponent实现了ImageObserver。一旦图像完全加载(以及之前的几个点),观察者就会收到通知,从而触发repaint().https://stackoverflow.com/questions/9183275
复制相似问题