Изображения и панели - PullRequest
       17

Изображения и панели

0 голосов
/ 11 октября 2009

У меня проблема с добавлением JPanel поверх Image. Вот что я пытаюсь сделать:

Image bgImage = loadImage(filename);
JPanel jp = new JPanel();

jp.setBounds(100,100,100,100);
jp.setOpaque(true);
jp.setBackgroudColor(Color.red);

bgImage.add(jp);

После этого я вижу только bgImage. Я попробовал все, но я все еще не могу показать панель. Кто-нибудь может мне помочь?

Ответы [ 2 ]

4 голосов
/ 11 октября 2009

Вы не можете разместить компонент внутри Image. Что вы хотите сделать, это нарисовать Image на фоне компонента свинга (например, JPanel). Все компоненты Swing имеют метод paint(), который вызывает эти три метода (возможно, не совсем в этом порядке): paintComponent(), paintChildren(), paintBorder(). Итак, вы хотите переопределить метод paintComponent(), чтобы закрасить фоновое изображение поверх панели. Когда он будет запущен, будет вызван ваш пользовательский метод, а затем будет вызван метод paintChildren(), который закрасит все «дочерние» компоненты поверх фонового изображения:

class BackgroundImagePanel extends JPanel {

    public void setBackgroundImage(Image backgroundImage) {
        this.backgroundImage = backgroundImage;
    }

    @Override
    protected void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);
        graphics.drawImage(backgroundImage, 0, 0, this);
    }

    private Image backgroundImage;
}

BackgroundImagePanel panel = new BackgroundImagePanel();
panel.setBackgroundImage(image);
panel.add(new JTextField("Enter text here..."));
panel.add(new JButton("Press Me"));
0 голосов
/ 12 октября 2009

Решение «BackgroundImagePanel» рисует изображение в его реальном размере. Если это требование, вы можете просто использовать JLabel вместо создания пользовательского компонента.

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

...