Java gui背景图像

时间:2014-05-14 21:51:22

标签: java swing jframe

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

我想在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的新手,所以请耐心等待我

2 个答案:

答案 0 :(得分:3)

这是一篇内容丰富的文章,旨在强调使用JLabel作为背景容器的一些缺点,有很多很好的例子已经在SO上投票了 < / p>

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

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

    enter image description here

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

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

    有关示例,请参阅How to set a background picture in JPanelHow do I resize images inside an application when the application window is resized?

答案 1 :(得分:2)

放一个

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

在你的jframe构造函数