Вы не можете разместить компонент внутри Image
. Что вы хотите сделать, это нарисовать Image
на фоне компонента свинга (например, JPanel
). Все компоненты Swing имеют метод paint()
, который вызывает эти три метода (возможно, не совсем в этом порядке): paintComponent()
, paintChildren()
, paintBorder()
. Итак, вы хотите переопределить метод paintComponent()
, чтобы закрасить фоновое изображение поверх панели. Когда он будет запущен, будет вызван ваш пользовательский метод, а затем будет вызван метод paintChildren()
, который закрасит все «дочерние» компоненты поверх фонового изображения:
class BackgroundImagePanel extends JPanel {
public void setBackgroundImage(Image backgroundImage) {
this.backgroundImage = backgroundImage;
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
graphics.drawImage(backgroundImage, 0, 0, this);
}
private Image backgroundImage;
}
BackgroundImagePanel panel = new BackgroundImagePanel();
panel.setBackgroundImage(image);
panel.add(new JTextField("Enter text here..."));
panel.add(new JButton("Press Me"));