使用background将其他组件添加到JFrame

我想在我的JFrame中添加背景图像,但是当我使用下面的代码执行它时,我无法添加其他元素,如JLabel或JTextField。

ImageIcon icon = new ImageIcon("src/images/back.jpg"); backImage = icon.getImage(); BackgroundImagePanel contentPane = new BackgroundImagePanel(); contentPane.setBackgroundImage(backImage); this.setContentPane(contentPane); 

如果有另一种方法将JTabbedPane添加到具有背景的JFrame,你能告诉我吗?

谢谢。

喜欢这个?

附录:“通常你会首先调用super.paintComponent(g) ,但由于图像将覆盖整个背景,因此不需要这样做。” – camickr

附录:另请参见不透明度属性 。

 import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Imager { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new ImagePanel("image.jpg")); frame.pack(); frame.setVisible(true); } }); } private static class ImagePanel extends JPanel { BufferedImage img; ImagePanel(String name) { this.setToolTipText(name); this.add(new JLabel(name)); try { img = ImageIO.read(new File(name)); this.setPreferredSize(new Dimension( img.getWidth(), img.getHeight())); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override protected void paintComponent(Graphics g) { // super.paintComponent(g); g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null); } } } 

尝试添加此:

 //4. Size the frame. this.pack(); //5. Show it. this.setVisible(true); 

取自如何制作框架