将一个背景图像添加到面板
我有一个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); } };
您需要重写paintComponent(Graphics g)
,并在Graphics对象g
上使用drawImage()
,如本例所示 。
另外,请通过@trashgod检查这两个示例:
- 例如 。
- 例如 。
你有一个资源位置问题。
Toolkit#createImage
可能会返回一个空的图像,如果找不到资源。
我build议你改用ImageIO
API,它支持更多的图像格式,但是如果图像没有find或者无法加载,也会抛出exception。
如何加载图像也取决于图像的位置。
如果图像存在于文件系统中,则只需使用File
对象引用即可,如果图像是embedded式资源(在您的应用程序中),则需要使用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); } } } }