1

我有一个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);
    }
};
4

2 回答 2

4

您需要重写JPanelpaintComponent(Graphics g)的方法并在Graphics对象上使用,如本例所示drawImage()g


另外,通过@trashgod检查这两个示例:

  1. 例子
  2. 例子
于 2012-12-09T21:25:42.820 回答
3

您有资源定位问题。

Toolkit#createImage如果找不到资源,可能会返回空图像。

我建议你改用ImageIOAPI,它支持更广泛的图像格式,但如果找不到图像或无法加载图像也会抛出异常。

加载图像的方式还取决于图像的位置。

如果图像存在于文件系统中,您可以简单地使用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);
            }
        }

    }

}
于 2012-12-09T22:25:33.463 回答