【发布时间】:2014-08-06 18:09:33
【问题描述】:
我看到了一个类似的问题,但我没有得到正确的解决方案,所以这是我的问题: (Coloring an area of BufferedImage)
我正在创建一个 BufferedImage,然后我从该图像中获取图形,我将在其上绘制一个绿色矩形并让它显示在 JPanel 中......但令人惊讶的是 - 它不是绿色的,我的错误在哪里??
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ViewPortTest {
public static void main(String[] args) {
new ViewPortTest().startUp();
}
private void startUp() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(new TestPanel() );
frame.pack();
frame.setVisible(true);
}
private class TestPanel extends JPanel{
private static final long serialVersionUID = 1L;
private int myWidth = 256;
private int myHeight = 156;
private BufferedImage img;
public TestPanel() {
super();
setPreferredSize(new Dimension(myWidth, myHeight) );
img = new BufferedImage(myWidth, myHeight, BufferedImage.TYPE_4BYTE_ABGR);
img.createGraphics();
img.getGraphics().setColor(Color.GREEN);
img.getGraphics().fillRect(0, 0, 256, 256);
img.getGraphics().dispose();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (img != null ){
g.drawImage(img, 0, 0, null);
}
}
}
}
结果是这样的:
所以 - 我的绿色矩形在哪里???
【问题讨论】:
-
你为什么
dispose()图形?你仍然需要它来绘画。 -
嗨彼得,它不会有任何区别 - 我在另一篇 SOF 文章中读到了关于处理图形的“提示”,但它不会有任何区别,试试你的拥有...
-
覆盖
paintComponent不是一个好主意。可能会有所帮助:stackoverflow.com/questions/15544549/… -
嗨彼得,这幅画确实画好了,不是重绘的问题……但它是白色而不是绿色……
-
嗨,彼得,如果您绘制组件(图形 gr)或简单地绘制(图形 gr)没有区别