Этот вопрос задавался много, но везде ответы не отвечают. Я могу заставить JFrame нормально отображать фоновое изображение, расширяя JPanel и переопределяя paintComponent, например так:
class BackgroundPanel extends JPanel {
private ImageIcon imageIcon;
public BackgroundPanel() {
this.imageIcon = Icons.getIcon("foo");
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(imageIcon.getImage(), 0,0,imageIcon.getIconWidth(),imageIcon.getIconHeight(),this);
}
}
Но как теперь добавить компонент поверх этого фона?
Когда я иду
JFrame w = new JFrame() ;
Container cp = w.getContentPane();
cp.setLayout(null);
BackgroundPanel bg = new BackgroundPanel();
cp.add(bg);
JPanel b = new JPanel();
b.setSize(new Dimension(30, 40));
b.setBackground(Color.red);
cp.add(b);
w.pack()
w.setVisible(true)
Он показывает маленький красный квадрат (или любой другой компонент), а не фон, но когда я удаляю cp.setLayout(null);
, появляется фон, но не мой другой компонент. Я предполагаю, что это как-то связано с тем, что paintComponent не вызывается нулевым LayoutManager, но я совсем не знаком с тем, как работает LayoutManager (это проект для колледжа, и в задании специально сказано не использовать LayoutManager) .
Когда я создаю изображение, фон должен отображать ноль (и, таким образом, прозрачный (??)) красный квадрат, поэтому возможно, что фон на самом деле выше других моих компонентов.
У кого-нибудь есть идеи?
Спасибо