Добавьте другие компоненты в JFrame с фоном - PullRequest
4 голосов
/ 02 июня 2010

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

<code>ImageIcon icon = new ImageIcon("src/images/back.jpg");
backImage = icon.getImage();
BackgroundImagePanel contentPane = new BackgroundImagePanel();
contentPane.setBackgroundImage(backImage);
this.setContentPane(contentPane);

Подскажите пожалуйста, есть ли другой способ добавить JTabbedPane в JFrame с фоном?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 02 июня 2010

Как это?

Приложение: «Обычно вы сначала вызываете super.paintComponent(g), но поскольку изображение будет охватывать весь фон, делать это не нужно.» - camickr

Добавление: см. Также свойство opacity .

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Imager {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new ImagePanel("image.jpg"));
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

    private static class ImagePanel extends JPanel {

        BufferedImage img;

        ImagePanel(String name) {
            this.setToolTipText(name);
            this.add(new JLabel(name));
            try {
                img = ImageIO.read(new File(name));
                this.setPreferredSize(new Dimension(
                    img.getWidth(), img.getHeight()));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        protected void paintComponent(Graphics g) {
            // super.paintComponent(g);
            g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
        }
    }
}
2 голосов
/ 02 июня 2010

Попробуйте добавить это:

//4. Size the frame.
this.pack();

//5. Show it.
this.setVisible(true);

Взято из Как сделать рамку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...