一个背景图片添加到面板(Add an Background image to a Panel)

2019-06-21 20:31发布

我有一个JPanel ,我想添加图片为背景。 我怎样才能做到这一点 ?

frame = new JFrame("Some frame");
panel1 = new JPanel();
panel1.setBorder(new EmptyBorder(5, 5, 5, 5));
// NEED TO ADD AN IMAGE TO THIS PANEL

panel1.setLayout(cardlayout);
frame.getContentPane().add(panel1);

frame.setLocationByPlatform(true);
frame.setVisible(true);

我需要一个图像添加到panel ,我该怎么办呢?

更新1

    panel1 = new JPanel()
    {
    private static final long serialVersionUID = 1L;

    @Override
    public void paintComponent(Graphics g)
    {

        g.drawImage(Toolkit.getDefaultToolkit().createImage("1.jpg"), 0, 0, null);
    }
};

Answer 1:

您需要重写方法paintComponent(Graphics g)的JPanel的和使用drawImage()的图形对象g如在本实施例中 。


此外,检查通过这两个例子@trashgod :

  1. 例子 。
  2. 例子 。


Answer 2:

你有资源定位问题。

Toolkit#createImage可能会返回一个空的图像,如果资源不能被发现。

我建议你使用ImageIO API相反,它支持更广泛的图像格式,同时也将引发异常,如果没有找到图像或无法加载。

你如何加载图像也将取决于在图像。

如果文件系统上存在的图像,你可以简单地使用一个File对象的引用,如果图像是嵌入的资源(你的应用程序中),您将需要使用Class#getResource获取URL给它。

public class TestGraphics {

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

    public TestGraphics() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setContentPane(new PaintTest());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class PaintTest extends JPanel {

        private BufferedImage image;

        public PaintTest() {

            setLayout(new BorderLayout());
            try {
                // Use this if the image exists within the file system
                image = ImageIO.read(new File("/path/to/image/imageName.png"));
                // Use this if the image is an embedded resource
//                image = ImageIO.read(getClass().getResource("/path/to/resource/imageName.png"));
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

        @Override
        public Dimension getPreferredSize() {
            return image == null ? super.getPreferredSize() : new Dimension (image.getWidth(), image.getHeight());
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (image != null) {
                int x = (getWidth() - image.getWidth()) / 2;
                int y = (getHeight()- image.getHeight()) / 2;
                g.drawImage(image, x, y, this);
            }
        }

    }

}


文章来源: Add an Background image to a Panel