我有一个通过我自己的类在JFrame中显示的BufferedImage。我选择使用自己的类显示BufferedImage,以便我可以扩展它。我的paintComponent并更新
public class MyBuffIm{
public void paintComponent(Graphics canvas) {
if (bi == null) {
} else {
//bi, maxWidth, and maxHeight were passed to constructor
canvas.drawImage(bi, 0, 0, maxWidth, maxHeight, null);
}
}
public void update(Graphics canvas) {
super.update(canvas);
if(bi != null){
//Got this from some tutorial in the net.
//Done out of desperation :|
paintComponent(bi.getGraphics());
}
}
}
我覆盖了更新,因为文档说的是“如果此组件不是轻量级组件,则AWT调用update方法以响应对重绘的调用”。我不确定我的组件是否轻量级。
在任何情况下,我的Runnable中都有以下代码(不能像我期望的那样工作):
BufferedImage p = SomeMyBuffIm.getBuffIm();
Vector<Point> randomPixels = getRandomPixels(500);
int limit = randomPixels.size()
for (i = 0; i < limit; i++) {
Point rp = randomPixels.get(i)
p.setRGB(rp.x, rp.y, Color.red.getRGB());
}
SomeMyBuffIm.repaint();
mainFrame.repaint(); //JFrame call to repaint
我想,由于我正在缩放图像,我无法辨别出新旧图像之间的区别。但我已经尝试了getRandomPixels的最大值仍然无效。顺便说一下,我的测试图像只是一张白纸,因此红色像素应该突出显示。
我做错了什么?
答案 0 :(得分:2)
我覆盖了更新,因为文档说的是“如果此组件不是轻量级组件,则AWT调用update方法以响应对重绘的调用”。我不确定我的组件是否轻量级。
不,你不应该覆盖update()。你会用AWT做到这一点,但不能用Swing做。
如果更新BufferedImage,那么您需要做的就是在MyBuffin类的实例上调用repaint()。
如果您需要更多帮助,请发布展示问题的SSCCE。