Как установить цвет фона на JLayeredPane?

Мне любопытно, почему вызов setBackground(Color) для JLayeredPane, похоже, фактически не устанавливает цвет фона. Я предполагаю, что это как-то связано с тем, что JLayeredPane по какой-то причине должен иметь прозрачный фон? В любом случае, вот код, который показывает проблему. Это на Mac, поэтому я считаю, что он использует OSX LAF. Результат показан на этом изображении.

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

public class Main {
    public static void main(String[] args) {

        // This should be done with Swing Utilities, but I wanted to keep this
        // simple...
        JFrame foo = new JFrame();
        foo.setSize(new Dimension(500, 500));

        JLayeredPane bar = new JLayeredPane();
        bar.setPreferredSize(new Dimension(200, 200));
        bar.setBackground(Color.red);

        // If you comment out the following line, you don't see any indication
        // the JLayeredPane is actually being drawn to screen
        bar.setBorder(BorderFactory.createLineBorder(Color.green));


        JPanel content = new JPanel();
        content.add(bar);

        foo.setContentPane(content);
        foo.setVisible(true);
    }
}

person Hamy    schedule 18.12.2010    source источник


Ответы (1)


Вы можете попробовать сделать многослойную панель непрозрачной:

bar.setOpaque(true);
person camickr    schedule 18.12.2010
comment
Любая идея, почему по умолчанию установлено значение false? - person Hamy; 19.12.2010
comment
Не уверен, что в учебнике Swing многоуровневая панель описывается как контейнер Swing, предоставляющий третье измерение для позиционирования. Поэтому я не уверен, почему это будет отличаться от JPanel, который выполняет двумерное позиционирование. - person camickr; 19.12.2010