java应用程序在将JPanel的背景图像设置为平铺时失败
我正在使用Background Panel类在我的JPanel上生成背景图像。到目前为止,我已经在渐变、缩放图像和实际图像方面取得了成功,但如果我将背景样式设置为平铺,桌面应用程序将失败/崩溃,它将打开,但窗口为空(透明),我必须停止应用程序以关闭它。我的控制台没有收到任何错误
这是我的JPanel上的自定义代码:
jPanel2 = new BackgroundPanel(imgHeader, BackgroundPanel.TILED);
前面定义了我的图像:
final Image imgHeader = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/headerBar.gif"));
我在后台面板类中添加了日志语句
private void drawTiled(Graphics g) {
Dimension d = getSize();
int width = image.getWidth(null); // returning as -1. should be 1
int height = image.getHeight(null); // returning as 48. Correct!
for (int x = 0; x < d.width; x += width) {
System.err.println("outer for imgW" + width + " panelW " + d.width + " newW " + x);
for (int y = 0; y < d.height; y += height) {
g.drawImage(image, x, y, null, null);
System.err.println("inner for" + height);
}
}
}
我发现宽度宽度=-1因此造成了一个无休止的循环。图像的宽度实际上是1个像素。高度(48个轴)正确。当我将图像的宽度更改为48像素时,得到了相同的结果
更多测试:当我将宽度设置为48时,高度返回-1
为什么图像宽度返回为-1
# 1 楼答案
来自java api
要解决这个问题,可以使用ImageIO.read(InputStream)。它将完全读取图像(创建一个^{} )
然后可以使用
image.getWidth()
和image.getHeight()
方法获得图像的大小