2012-03-22 4 views
1

이클립스 헬리오스에서 JFrame의 또는 JPanel의 배경 이미지를 설정하는 방법 : 나는 ImageTest.java 파일을 만들 때내가 봤하고 코드 발견했습니다

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

이 나를 위해 일을하고 background.png를 넣어 동일한 폴더에 있습니다.

하지만 이미지와 함께 Eclipse IDE (기본 패키지에 있음)에 동일한 코드를 붙여 넣으면 이미지가 배경으로 설정되지 않습니다. 실제로 그것은 이미지를 찾지 못합니다. 그리고 이것이 이유입니다.

둘 다 동일하게 유지하려고했습니다. package pack; 그럼에도 이미지가 없으므로 출력이 없습니다.

나는 workspace> project 폴더> war> WEB-INF> classes 을 열려고 시도했다. cmd에서 프로그램을 컴파일했다. 아직도 그것은 보여주지 않습니다.

문제가 무엇인지 알 수 없습니다. 어떤 해결책을 알고있는 사람이라면 누구나 환영합니다. 사전에

감사합니다.

설정 프레임도 환영으로 직접 배경 ...

나는이 모든 사용하여 코드를 수행했지만,이 후 작업 할 때 나는 GUI에 대한 창 빌더로 이동됩니다. 그러면 당신의 도움이 창 창고에서 일할 것입니까?

답변

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

이 더 피드백 1를 제공하지 않는 이미지를로드 바보 같은 (그러나 공통) 방법이다.

background.png은 더 이상 파일이 아니지만 이제는 Jar의 일부가 될 것입니다. 이 경우 액세스 방법은 Class.getResource()에서 얻은 URL을 사용하는 것입니다.

  1. 이미지를로드 할 수없는 경우에 도움이 & 정보 예외를 throw 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); 
관련 문제