2013-02-01 4 views
3

JFrame 클래스에 netbeans 빌더 "디자인"을 사용하고 있습니다. 전통적인 JFrame을 가지고 있는데, JPanel을 빌더와 함께 추가했습니다.Swing Netbeans 빌더에 배경 이미지가 표시되지 않습니다.

이제 코드에서,이 같은이 패널에 배경을 추가 할 : 난 아무것도, 그냥 빈 JFrame의/JPanel에 표시되지 않는

public class NewJFrame extends javax.swing.JFrame { 

    public NewJFrame() { 
     initComponents(); 
     addBackground(); 
    } 

    private void addBackground() 
    { 
     Image bgImage; 
     try { 
      bgImage = ImageIO.read(new File("src/general/Mockup.png")); 
      jPanel1.add(new NewJFrame.ImagePanel(bgImage)); 
      jPanel1.repaint(); 
     } catch (IOException ex) { 
      Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public static void main(String args[]) { 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new NewJFrame().setVisible(true); 
      } 
     }); 
    } 
} 

.

, BTW 나는 ImagePanel 코드

@SuppressWarnings("serial") 
class ImagePanel extends JPanel { 
    private Image image; 

    ImagePanel(Image image) { 
     this.image = image; 
    }; 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, getWidth(), getHeight(), this); 
    } 
} 
+0

[answer] (http://stackoverflow.com/a/9866659/1057230)를 참조하십시오. –

+1

Netbeans은 XML 양식 파일을 사용하여 양식 디자이너에서 양식을 작성하고 표시하는 경향이 있으므로 addBackground 메소드를 실행하지는 않습니다. 또한, ImagePanel에 기본 constrcutor가 없다는 사실을 감안할 때, 나는 그것을 위해 놀랐습니다. 디자이너가 어떤 식 으로든 추가 할 수있게합니다. ImagePanel에 set/getImage 메서드를 추가하면 폼 디자이너 속성을 사용하여 이미지를 설정할 수 있습니다. 또한 파일 경로가 걱정됩니다. – MadProgrammer

답변

5
  • public void paintComponent(Graphics g) { (painting in SwingGraphics(2D))이 컨테이너에 다시 크기를 반환하지 않습니다

  • 때문에 클래스 ImagePanel extends JPanel { must override getPreferredSize(), 간단한 반환 Dimmension(0, 0)

  • JPanelFlowLayout (만 받아 시행하고 있습니다 API에서 그 하위 항목 인 PreferredSize)을 입력하면 custom painting이 화면에 표시되지 않습니다.

3

jPanel1 무엇을 위해 이것을 사용하고? 어떤 레이아웃을 사용합니까? GUI를 렌더링 한 후 ImagePanel 객체의 크기는 어느 정도입니까? 이러한 체조를 모두 수행하는 대신 JFrame의 contentPane으로 이미지 (또는 ImagePanel 인스턴스)와 함께 JLabel을 단순히 사용하지 않는 이유는 무엇입니까? 이 유형의 코딩은 NetBeans 생성 코드 사용을 피하는 한 가지 이유입니다. 직접 코딩 해 보도록하겠습니다. GUI가 보여주는 모든 것을 완전히 제어 할 수 있습니다.

+0

맞습니다. Netbeans에서 생성 된 코드는 ... 음, Visual Studio Builder와 XCode Builder를 좋아합니다. NetBeans 빌더를 마지막으로 할 때 – Kalzem

1

JLabel을 추가하고 생성자에 이미지 이름을 삽입하는 이유는 무엇입니까? 좋아요 :

JFrame background = new JFrame ("back.png");

그런 다음이 레이블을 프레임이나 JPanel에 직접 추가 할 수 있습니다.

+0

JLabel을 setIcon과 함께 사용하면 올바른 결과를 얻을 수 있지만 JButton 또는 JTextField와 같은 이미지 위에 올릴 수는 없습니다. 자동으로 JLabel을 옆으로 이동시킵니다. 서로 겹칠 수는 없습니다. – Kalzem

+3

@BabyAzerty : 사실, 당신은 할 수없는 일을 할 수 있습니다. 이 같은 thingy 및이 [예제] (http://stackoverflow.com/a/10245045/1057230)와 관련된 이러한 [멋진 답변] (http://stackoverflow.com/q/10140800/1057230)을보십시오. 'JLabel'에 컴포넌트를 추가하는 방법에 대해 하나 더 관련된 [예제] (http://stackoverflow.com/a/11428289/1057230)가 있습니다. –

관련 문제