如何将图像放在窗口的背景中

时间:2011-05-10 21:47:45

标签: java swing

我差不多完成了我的hangman java代码。我想在后台添加一张图片。(nightsky.png)如何在绘图图形方法中执行此操作?我在开始时创建了一个imageicon。

public HangmanRevised() {
    setSize(600,400);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new FlowLayout());

    ImageIcon background = new ImageIcon("nightsky.png");
    Letter = new TextField();
    JLabel label = new JLabel("pick a Letter");
    button = new Button("Enter");
    add(label);
    add(button);
    add(Letter);

    button.addActionListener(this);

    createGame(); 
} 

public void paint(Graphics g) {
    super.paint(g);
    g.drawImage(background, 0, 156, Color.green, button);
}

4 个答案:

答案 0 :(得分:1)

如果您以实际尺寸绘制图像,则无需进行任何自定义绘画。

正如已经建议的那样,您只需将Icon添加到JLabel并将标签添加到框架(或面板)中。然后,如果您希望图像显示在标签内的证书位置,那么您只需将一个EmptyBorder添加到标签中。

答案 1 :(得分:0)

您需要将背景放在某处,即:

//add the following in the HangmanRevised() constructor (?)

button.addActionListener(this);

//To add
ImagePanel panel = new ImagePanel(background.getImage());
JFrame frame = new JFrame();
frame.getContentPane().add(panel);
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
add(frame); 
//end...

createGame(); 

答案 2 :(得分:0)

通过覆盖JPanel,您可以重做paintComponent()来绘制图像,JPanel本身应该为其子项设置绘图功能(虽然我没有测试过这个功能)。

http://www.java2s.com/Code/Java/Swing-JFC/Panelwithbackgroundimage.htm

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ImageTest {

  public static void main(String[] args) {
    ImagePanel panel = new ImagePanel(new ImageIcon("images/background.png").getImage());

    JFrame frame = new JFrame();
    frame.getContentPane().add(panel);
    frame.pack();
    frame.setVisible(true);
  }
}

class ImagePanel extends JPanel {

  private Image img;

  public ImagePanel(String img) {
    this(new ImageIcon(img).getImage());
  }

  public ImagePanel(Image img) {
    this.img = img;
    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);
    setSize(size);
    setLayout(null);
  }

  public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
  }

}

答案 3 :(得分:0)

您还可以2D Graphics中的建议使用RotatableImage构建您喜欢的任何动态图片。