【发布时间】:2012-10-16 15:58:49
【问题描述】:
在下面的代码中,我将 2dim 数组转换为缓冲图像(有效,图像是二进制的(背面和白色))。然后我显示这个图像。
我现在的问题是如何更新此图像(因为我想在每次循环运行时绘制一些未在此处显示的内容)。
这也引出了我的第二个问题:如何在这张图片上画一个点。 (这也意味着如果我想在 150,100 上画一个点;它应该在图像的 150,100 像素上)。
public void showImage(int xPoint, int yPoint) throws IOException {
// Two dim array conversion to a bufferedImage
BufferedImage bimg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < width; y++) {
for (int x = 0; x < height; x++) {
tempValue = (pixelArray[y][x]==1) ? 255 : 0;
int value = tempValue << 16 | tempValue << 8 | tempValue;
bimg.setRGB(x, y, value);
}
}
JFrame canvas = new JFrame();
canvas.setSize(bimg.getWidth(), bimg.getHeight());
canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas.setTitle("Contour");
Container pane = canvas.getContentPane();
ColorPanel panel = new ColorPanel(bimg,xPoint,yPoint);
pane.add(panel);
canvas.setVisible(true);
}
和
class ColorPanel extends JPanel {
BufferedImage bimg;
int x;
int y;
public ColorPanel(BufferedImage image,int _x, int _y) {
bimg = image;
x = _x;
y = _y;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(bimg, null, 0, 0);
}
}
我尝试的是:
g2d.setColor(Color.RED);
g2d.drawLine(x, y, x, y);
虽然每次运行都会打开一个新窗口,但我不认为重点是正确的
【问题讨论】:
-
我认为必须为
JPanel覆盖PreferredSize -
“虽然每次运行都会打开一个新窗口”。因为您在每次调用 showImage() 时都会创建一个新的 JFrame。如需更多帮助,请发布 SSCCE
-
@David Huh.. 好点。我的立场是正确的。
标签: java swing jpanel bufferedimage paintcomponent