Прозрачные JLabels на JLayeredPane

Я пытаюсь отобразить несколько изображений PNG на JLayeredPane с перекрытием.

Вот текущий код для создания JLabel, содержащего изображение, и добавления его в JLayeredPane:

BufferedImage im = ImageIO.read(new File(fname));
JLabel uLabel = createLabelForImage(im);
mapLayeredPane.add(uLabel, new Integer(zIndex++), 1);

И метод createLabelForImage():

protected JLabel createLabelForImage(BufferedImage im) {
    JLabel label = new JLabel(new ImageIcon(im));
    label.setVerticalAlignment(JLabel.TOP);
    label.setHorizontalAlignment(JLabel.CENTER);
    label.setOpaque(true);
    label.setBounds(0, 0, im.getWidth(), im.getHeight());

    return label;
}

Что я получаю, так это то, что объекты правильно перекрываются, но прозрачный фон изображений PNG заменяется своего рода бело-серым цветом.

Это проблема с ImageIcon? С JLayeredPane? Может быть, мне нужно установить что-то вроде label.setBakground(sort_of_transparency_code) или что-то в этом роде?

Заранее спасибо :)


person Undo    schedule 12.05.2012    source источник


Ответы (1)


Ваша метка не должна быть непрозрачной, если вы хотите видеть сквозь нее, см. JComponent.setOpaque

 If true the component paints every pixel within its bounds. 
 Otherwise, the component may not paint some or all of its
 pixels, allowing the underlying pixels to show through.
person mtraut    schedule 12.05.2012
comment
Правильно, это было! SetOpaque() был добавлен сюда во время тестов, потому что JLabels вообще не отображались в первый раз... Я забыл об этой строке... теперь намного лучше. Спасибо большое :) . - person Undo; 12.05.2012