2012-03-22 4 views
3

JFrameBorderLayout이 있고 모든면 (북쪽, 동쪽 등)의 패널이 있습니다. 패널에는 주로 라벨과 버튼이 있습니다.배경 이미지 콘텐츠가 포함 된 JFrame

프레임이 배경 이미지를 갖기를 바랍니다. 일부 연구에서 내 프레임의 콘텐츠 창을 변경해야한다고했습니다.

그러나이 방법을 사용하면 콘텐츠가 배경에 표시되고 볼 수 없습니다. 또한, 프레임 크기를 조정하면 이미지의 크기를 조정하는 방법을 모르겠습니다.

쉽게 해결할 수 있습니까? 아니면 대부분의 코드를 다시 작성해야합니까?

답변

4
  1. BorderLayout.CENTER에 배경 이미지 JPanel (또는 JComponent)를 넣어,이 JPanel 모두 적용이 JPanel

  2. there are Jpanels on all sides (North, East ,...). In the Jpanels there are Jlabels and Jbuttons mostly.

    JComponents에 전체 JFrame 지역이 행해져 Yout JComponents 넣어의 나머지 부분을 채 웁니다 사용할 수있는 RectangleJFrame이고, 이후 Background Image (내 첫 번째 지점부터)은 표시되지 않습니다. 이 JComponentsJFrame on_top하고있을

  3. (내 1 점에서) JPanel with Background Image를 추가 할뿐만 아니라,이 Image 숨길 수, 다음 JPanel#setOpaque(false); 또 다른 JPanel(s)가 넣어,이 JPanel 투명 될 것 통지 JPanel는 기본적 FlowLayout에 의해 구현했다

+1

'GridLayout과()'과'센터 '는'BorderLayout' 매우 유사하게 작동합니다. – trashgod

1
frame.getContentPane().add(new JPanel() { 

     public void paintComponent(Graphics g) { 
      g.drawImage(img, 0, 0, this.getWidth(), this.getHeight()); 
     } 
}); 
+0

주의 : a) 이미지가 투명하지 않은 경우에만 유효합니다. b) contentPane에 추가 된 모든 것의 아래에 있어야한다는 요구 사항을 충족하지 못합니다 :-) – kleopatra

0

이 예제는 시작하는 것입니다. 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); 
+3

-1 (paintComponent 대신) – kleopatra

관련 문제