Как установить фоновый логотип в моем JPanel или в JFrame? - PullRequest
2 голосов
/ 05 ноября 2011

Как мне установить wall1.jpg в качестве фона для моего JFrame или JPanel?

public class JBackGroundImageClass extends JFrame
{
  Image img;
  private final JPanel JPanel;

  public JBackGroundImageClass()
  {
    setLayout (new BorderLayout ());    
    setBounds(22,33,400, 400);
    setVisible(true);

    img = Toolkit.getDefaultToolkit().createImage("wall1.jpg");    
    JPanel = new JPanel()
    {
      public void paintComponent(Graphics g)
      {img = Toolkit.getDefaultToolkit().createImage("wall1.jpg");
        g.drawImage(img, 0, 0, null);
      }
    };

    this.add("North" , JPanel);
    JPanel.setSize(400, 400);
    JPanel.setBackground(Color.red);
    JPanel.setVisible(true);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }


  public static void main(String[] args) 
  {
    new JBackGroundImageClass().setVisible(true);
  }

}

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

Вот один общий подход:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class JBackGroundImageClass extends JFrame {

    private Image img;
    public JBackGroundImageClass() {
        this.setLayout(new BorderLayout());
        try {
            img = ImageIO.read(new File("image.jpg"));
        } catch (IOException e) {
            e.printStackTrace(System.err);
        }
        this.add(new JPanel() {

            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(img, 0, 0, null);
            }

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(img.getWidth(null), img.getHeight(null));
            }
        });
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setVisible(true);
    }

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

            @Override
            public void run() {
                new JBackGroundImageClass().setVisible(true);
            }
        });
    }
}
1 голос
/ 05 ноября 2011

В ответе trashgod нет причин делать заказную живопись.Изображение нарисовано в его предпочтительном размере.Поэтому вы можете просто добавить ImageIcon в JLabel и добавить метку к фрейму.Вы можете установить менеджер надписи на этикетке так, как вы хотите, так же, как вы можете использовать для панели.

Вы можете использовать пользовательскую роспись, если хотите масштабировать изображение, в этом случае вы будете использовать:

drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...