【发布时间】:2015-06-11 02:18:04
【问题描述】:
基本上,我在缓冲图像中有一个(宽度 x 高度)大小的像素,并且想在缓冲图像/JPanel 中绘制简单的水平黑色线条。每次单击按钮都会创建一条新的水平线。
虽然按钮事件到达了updateImage()函数,并且Log输出表明系统调用了paintComponent(Graphics g)。没有更新发生。唯一一次绘制 Line 是在构造函数初始化时。每次单击按钮时屏幕都没有更新;只有最初的一行是从构造函数中的测试调用中绘制的。
最终产品是模拟打印机。
谢谢。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;
public class ViewPaper extends JPanel {
private BufferedImage buffer = null;
private final int width = 384;
private int height = 500;
private final static Logger LOG = Logger.getLogger(ViewPaper.class
.getName());
public ViewPaper() {
super();
buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
printDotLine(50);
LOG.log(Level.INFO, "ViewPaper: Load Successful.");
}
/* Update BufferedImage then repaint to screen.
* Note. A Top Level repaint() is also called
* and according to log the paintComponent is
* called but nothing is happening!
*/
public void updateImage(int y) {
printDotLine(y);
repaint();
LOG.log(Level.INFO, "ViewPaper: updateImage(); Called.");
}
/* Update JPanel with updated buffer. */
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.drawImage(buffer, 0, 0, this);
g2d.dispose();
LOG.log(Level.INFO, "ViewPaper: paintComponent(); Called.");
}
/* Sets row of pixels in buffer to black.*/
public void printDotLine(int y) {
for (int x = 0; x < width; x++) {
buffer.setRGB(x, y, Color.BLACK.getRGB());
}
LOG.log(Level.INFO, "ViewPaper: printDotLine(); Called.");
}
}
【问题讨论】:
-
您尚未包含用于更新 UI 的按钮。代码工作正常(我添加了
MouseListener,每次点击都会更新)。这表明问题出在您未提供的代码中的其他位置
标签: java swing jpanel bufferedimage paintcomponent