Как сделать фоновое изображение JFrame прозрачным?
В настоящее время я использую этот код для создания фонового изображения для моего JFrame:
BufferedImage myImg = ImageIO.read(myUrl);
this.setContentPane(new ImagePanel(myImg));
//ImagePanel class
public class ImagePanel extends JComponent {
private Image image;
public ImagePanel(Image image) {
this.image = image;
}
@Override
protected void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, null);
}
}
В результате этого изображение скрывает все, что у меня есть в JFrame. Как я могу переключить прозрачность нарисованного изображения так, чтобы я все еще мог видеть мой контент, имея изображение в качестве фона?
2 ответа
Почему вы продолжаете говорить о прозрачности? Вы бы заботились о прозрачности, только если вы рисуете изображение "поверх" ваших компонентов.
Если вы хотите, чтобы фоновое изображение было на вашей рамке, вы добавляете изображение на панель и добавляете панель на рамку. Затем вы добавляете другие компоненты на фоновую панель, чтобы эти компоненты отображались в верхней части изображения.
Это не имеет ничего общего с прозрачностью.
Фоновая панель обычно представляет собой JPanel, а не JComponent, поскольку панель предназначена для использования в качестве контейнера.
См. Фоновую панель для примера.
Вы не можете просто изменить изображение, чтобы сделать его прозрачным. Вам нужно загрузить изображение с прозрачными пикселями.
protected void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, null);
Должно быть:
protected void paintComponent(Graphics g) {
super.paintComponent(g); // paint the parent component!
g.drawImage(image, 0, 0, this);