Как сделать фоновое изображение JFrame прозрачным?

В настоящее время я использую этот код для создания фонового изображения для моего JFrame:

    BufferedImage myImg = ImageIO.read(myUrl);
    this.setContentPane(new ImagePanel(myImg));

    //ImagePanel class
    public class ImagePanel extends JComponent {
        private Image image;
        public ImagePanel(Image image) {
            this.image = image;
        }

        @Override
        protected void paintComponent(Graphics g) {
            g.drawImage(image, 0, 0, null);
        }
    }

В результате этого изображение скрывает все, что у меня есть в JFrame. Как я могу переключить прозрачность нарисованного изображения так, чтобы я все еще мог видеть мой контент, имея изображение в качестве фона?

2 ответа

Решение

Почему вы продолжаете говорить о прозрачности? Вы бы заботились о прозрачности, только если вы рисуете изображение "поверх" ваших компонентов.

Если вы хотите, чтобы фоновое изображение было на вашей рамке, вы добавляете изображение на панель и добавляете панель на рамку. Затем вы добавляете другие компоненты на фоновую панель, чтобы эти компоненты отображались в верхней части изображения.

Это не имеет ничего общего с прозрачностью.

Фоновая панель обычно представляет собой JPanel, а не JComponent, поскольку панель предназначена для использования в качестве контейнера.

См. Фоновую панель для примера.

Вы не можете просто изменить изображение, чтобы сделать его прозрачным. Вам нужно загрузить изображение с прозрачными пикселями.

protected void paintComponent(Graphics g) {
        g.drawImage(image, 0, 0, null);

Должно быть:

protected void paintComponent(Graphics g) {
        super.paintComponent(g);  // paint the parent component!
        g.drawImage(image, 0, 0, this);

НАПРИМЕР

  1. Ответ на рисование фонового изображения.
  2. Ответ на фоновое изображение скрывает все компоненты дизайна GUI.
Другие вопросы по тегам