2012-03-22 2 views
1

Я гугле его и нашел код:Как установить JFrame или JPanel фоновое изображение в Eclipse, Helios

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> классы Затем скомпилировал программу из cmd. Тем не менее это не видно.

Я не знаю, в чем проблема. Любой, кто знает какое-либо решение, наиболее приветствуется.

Спасибо заранее.

Установка фона непосредственно на кадр также приветствуется ...

Я сделал все это с помощью кода, но когда это будет работать, то я буду смещаться к окнам строителя для графического интерфейса пользователя. Так будет ли и помощь от вас работать в оконном застройщике?

ответ

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

Это тупой (но общий) способ загрузить изображение, которое не обеспечивает обратную .

Вы, скорее всего, обнаружите, что background.png больше не является файлом, а теперь частью Jar. В этом случае способ доступа к нему - использовать URL, полученный от Class.getResource().

  1. Интеллектуальный способ загрузки изображений использует ImageIO, который бросает полезные & информативные исключения, если не может быть загружен образ.
+0

Эй Спасибо за ответ. Я попробую ImageIO и посмотрю, сработало ли это. –

+0

Привет, Андрей ... Спасибо, это сработало для меня. :) –

+0

Рад, что вы его отсортировали. :) –

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); 
Смежные вопросы