2011-05-10 43 views
1

我幾乎完成了我的hang子手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); 
} 

回答

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(); 
+0

我可以把這個放在公共hangmanrevised中,或者我應該把它放在不同的班級嗎? – 2011-05-10 21:55:46

+0

我還沒有看到你的所有代碼;但我認爲我所編輯的代碼應該在hangmanrevised中工作... – xgMz 2011-05-10 22:11:23

+0

我不斷收到一個編譯錯誤,說找不到ImagePanel的符號。猜測? – 2011-05-10 22:21:03

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); 
    } 

} 
+0

任何方式我可以做這樣的事情? – 2011-05-10 22:21:20

+0

private Image img; – 2011-05-10 22:21:46

+0

img = new Image(new ImageIcon(「nighsky.png」)); – 2011-05-10 22:22:04

1

如果你是畫在它的實際大小的圖像,也沒有必要做任何自定義的繪畫。

正如已經建議您只需將圖標添加到JLabel並將標籤添加到您的框架(或面板)。然後,如果您希望圖像顯示在標籤內的某個證書位置,則只需將一個EmptyBorder添加到標籤。