Java gui背景图像

我意识到这个问题已被多次询问,但我觉得它没有得到妥善回答。

我想在java gui中使用图像作为背景

我尝试过以下方法:

import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; public class worldGUI extends JFrame implements ActionListener { private ImageIcon world = new ImageIcon("C://Users/Hans/Documents/world/map.png"); private JLabel map = new JLabel(world); private JButton borders = new JButton("Borders"); public worldGUI() { setTitle("Welcome to the World"); setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(600,500); setLocation(100,100); setVisible(true); borders.addActionListener(this); map.add(borders); setVisible(true); } } 

我是java的新手,所以请耐心等待我

放一个

setContentPane(new JLabel(new ImageIcon("C:\\img_url")));

在你的jframe构造函数中

这是一篇内容丰富的文章,旨在突出使用JLabel作为背景容器的一些缺点,已经有很多很好的例子,上面投票给那些

虽然使用JLabel作为背景容器是解决问题的常用方法,但仍有许多问题需要考虑……

  1. JLabel不会调整图像大小以适应可用的容器大小。 不是显示停止,但如果您的内容超出背景图像的大小,图像将不会resize以适应它。
  2. JLabel默认没有布局管理器。 不是展示塞,但你需要注意你需要提供一个
  3. 标签的默认水平对齐方式是LEFT 。 不是显示限制器,但你应该注意你可能需要调整它的属性
  4. 标签将忽略其内容的首选大小。 这很烦人,并且与第一点有关。 如果您的内容超出了标签图标和文字的可用尺寸,则内容可能会下溢或降低到其最小尺寸要求。 当你打包框架时,这尤其令人讨厌……

例如,以下(故意)设置了允许内容超出背景图像的边界,使用JLabel和添加到其中的内容显示背景图像的边界。

在此处输入图像描述

解决这些问题的另一种常用解决方案是使用JPanel并将图像绘制成自己的图像。

您可以根据需要控制缩放图像的能力,您可以更好地控制图像的布局要求和位置。

请参阅如何在JPanel中设置背景图片以及如何在调整应用程序窗口大小时调整应用程序内的图像大小? 举些例子