2012-03-22 49 views
1

我GOOGLE了一下,發現代碼:如何設置的JFrame或JPanel的背景圖像在Eclipse赫利俄斯

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

這爲我工作,當我創建ImageTest.java文件,並把background.png在同一個文件夾中。

但是,當我將相同的代碼與圖像一起粘貼到Eclipse IDE(默認包中)時,它不會將圖像設置爲背景。其實它找不到圖像,這就是原因。

我試過讓它們都在同一個package pack;即使它沒有找到圖像,所以沒有輸出。

我試着打開工作區>項目文件夾> war> WEB-INF> classes 然後從cmd編譯程序。它仍然不顯示。

我不知道是什麼問題。任何知道任何解決方案的人都非常歡迎

在此先感謝。

設置背景直接在框架上也很歡迎...

我所做的這一切使用代碼,但是當這將是工作的話,我會轉移到窗口建設者GUI。那麼你的幫助也會在窗口構建器中工作嗎?

回答

2
..new ImageIcon("background.png").. 

這是加載提供沒有反饋圖像的笨(但共同)的方式。

你很可能會發現background.png不再是一個文件,但現在是Jar的一部分。在這種情況下,訪問它的方法是使用從Class.getResource()獲得的URL

  1. 聰明的辦法是使用ImageIO,會拋出有用&信息例外如果圖像不能加載到加載圖像。
+0

嘿感謝您的答覆。我會嘗試ImageIO並查看它是否工作。 – 2012-03-22 04:41:45

+0

你好安德魯...感謝它爲我工作。 :) – 2012-03-22 05:05:01

+0

很高興你把它分類。 :) – 2012-03-22 05:06:36

1

這不是真的回答你的問題,但由於答案已被接受,我想,你究竟想要偷看一下。

這個類可以像任何JPanel一樣使用它。它會在面板的背景上拍攝一張圖像,並在幀被調整大小時調整圖像的大小。

public class JPanelWithBackground extends JPanel { 
Image imageOrg = null; 
Image image = null; 
{ 
addComponentListener(new ComponentAdapter() { 
    public void componentResized(ComponentEvent e) { 
     int w = JPanelWithBackground.this.getWidth(); 
     int h = JPanelWithBackground.this.getHeight(); 
     image = w>0&&h>0?imageOrg.getScaledInstance(w,h, 
       java.awt.Image.SCALE_SMOOTH):imageOrg; 
     JPanelWithBackground.this.repaint(); 
    } 
}); 
} 
public JPanelWithBackground(Image i) { 
    imageOrg=i; 
    image=i; 
    setOpaque(false); 
} 
public void paint(Graphics g) { 
    if (image!=null) g.drawImage(image, 0, 0, null); 
    super.paint(g); 
} 
} 

使用例:

Image image = your image 
JFrame f = new JFrame(""); 
JPanel j = new JPanelWithBackground(image); 
j.setLayout(new FlowLayout()); 
j.add(new JButton("YoYo")); 
j.add(new JButton("MaMa")); 
f.add(j); 
f.setVisible(true);