Сбой приложения при установке фонового изображения JPanel в TILED - PullRequest
0 голосов
/ 17 июня 2011

Я использую класс 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?

1 Ответ

1 голос
/ 17 июня 2011

Из Java API :

Возвращает: ширина этого изображения или -1, если ширина еще не известна.


Для решения проблемы вы можете использовать ImageIO.read (InputStream) .Он полностью прочитает изображение (создав BufferedImage).

final Image imgHeader = 
         ImageIO.read(getClass().getResourceAsStream("/images/headerBar.gif"));

Затем можно использовать методы image.getWidth() и image.getHeight(), чтобы получить размер изображения.

...