it-swarm.com.ru

Настройка фоновых изображений в JFrame

Доступны ли какие-либо методы для установки изображения в качестве фона в JFrame?

35
Shruthi

Нет встроенного метода, но есть несколько способов сделать это. Самый простой способ, который я могу придумать на данный момент:

  1. Создайте подкласс JComponent .
  2. Переопределите метод paintComponent(Graphics g) , чтобы нарисовать изображение, которое вы хотите отобразить.
  3. Установите панель содержимогоJFrame, чтобы быть этим подклассом.

Пример кода:

class ImagePanel extends JComponent {
    private Image image;
    public ImagePanel(Image image) {
        this.image = image;
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }
}

// elsewhere
BufferedImage myImage = ImageIO.read(...);
JFrame myJFrame = new JFrame("Image pane");
myJFrame.setContentPane(new ImagePanel(myImage));

Обратите внимание, что этот код не обрабатывает изменение размера изображения, чтобы соответствовать JFrame, если это то, что вы хотели.

37
Michael Myers

Попробуй это :

import Java.io.File;
import Java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        try {
            f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("test.jpg")))));
        } catch (IOException e) {
            e.printStackTrace();
        }
        f.pack();
        f.setVisible(true);
    }

}

Кстати, это приведет к тому, что панель содержимого не будет контейнером. Если вы хотите добавить что-то к нему, вы должны создать подкласс JPanel и переопределить метод paintComponent.

18
Savvas Dalkitsis

Вы можете использовать Background Panel class. Он выполняет пользовательскую рисование, как описано выше, но дает вам возможность отображать изображение в масштабе, мозаичном или обычном размере. Также объясняется, как вы можете использовать JLabel с изображением в качестве панели содержимого для фрейма.

6
camickr
import javax.swing.*;

import Java.awt.*;

import Java.awt.event.*;

class BackgroundImageJFrame extends JFrame
{

    JButton b1;
    JLabel l1;

    public BackgroundImageJFrame() {

        setSize(400,400);
        setVisible(true);

        setLayout(new BorderLayout());

        JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful_design.png"));

        add(background);

        background.setLayout(new FlowLayout());

        l1=new JLabel("Here is a button");
        b1=new JButton("I am a button");

        background.add(l1);
        background.add(b1);
    }

    public static void main(String args[]) 
    {
        new BackgroundImageJFrame();
    }
}

проверьте ссылку ниже

http://Java-demos.blogspot.in/2012/09/setting-background-image-in-jframe.html

0
yugaanks