Я использую класс Background Panel для фоновых изображений на моих JPanels. До сих пор я преуспел в градиентах, масштабированных изображениях и фактических изображениях, но если я установил стиль фона на TILED, настольное приложение дает сбой / вылетает, оно открывается, но окно пустое (просвечивает), и я должен остановить приложение закрыть это. Я не получаю никаких ошибок в моей консоли.
Вот мой код на моей JPanel:
jPanel2 = new BackgroundPanel(imgHeader, BackgroundPanel.TILED);
Мое изображение определено ранее:
final Image imgHeader = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/headerBar.gif"));
Я добавил операторы записи в класс Background Panel
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?