2017-12-07 2 views
0

스윙을 처음 사용하고 이미지 배경을 내 JFrame에 추가하려고합니다. 그러나 내 paintComponent 메서드가 작동하지 않습니다. 백그라운드에서 이미지가 그려 지도록 코드를 수정하는 방법에 대한 제안을 제게 해주시겠습니까?paintComponent 코드가 작동하지 않습니다.

코드는 다음과 같습니다 :

JFramepaintComponent 재정
// all necessary imports have been added. 
public class Menu extends JFrame { 
private Image backgroundImage; 
private JFrame frame; 

public static void main(String[] args) throws IOException { 
    Menu window = new Menu(); 
    window.frame.setVisible(true); 
} 

public Menu() throws IOException { 
    initialize(); 
} 

public void initialize() throws IOException { 

    frame = new JFrame(); 
    frame.setBounds(100, 100, 312, 294); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

} 
public void paintComponent(Graphics g) throws IOException { 
    backgroundImage = ImageIO.read(new File("P:\\Profiles\\workspace\\Games\\Images\\matrix.jpg")); 
    g.drawImage(backgroundImage, 0, 0, null); 

} 
} 

답변

3

가 유용하지 않습니다, 대신 컨텐츠 창 paintComponent 우선합니다.

일반적으로 JFrame을 확장해도 필요하지 않습니다.

마지막으로을 사용하여 각 페인트 호출에서 이미지를로드하는 대신 이미지를로드하고 필요한 경우 콘텐츠 패널에서 작업하는 것이 좋습니다. 당신이 도움을 안녕하세요 감사

public class Menu extends JPanel { 

    private Image backgroundImage; 

    public static void main(final String[] args) throws IOException { 
     Menu menu = new Menu(); 
     JFrame frame = new JFrame(); 
     frame.setContentPane(menu); 
     frame.setBounds(100, 100, 312, 294); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public Menu() throws IOException { 
     initialize(); 
    } 

    public void initialize() throws IOException { 

     backgroundImage = ImageIO.read(new File("P:\\Profiles\\workspace\\Games\\Images\\matrix.jpg")); 

    } 

    @Override 
    public void paintComponent(final Graphics g){ 

     super.paintComponent(g); 
     g.drawImage(backgroundImage, 0, 0, this); 

    } 

} 
+0

: 모두 함께 퍼팅

,이 예제를 참조하십시오. 지금은 효과가있는 것 같습니다. 나중에 참조 할 수있는 이유는 내가 아직 새롭고이 실수를 다시하고 싶지 않기 때문에 왜 작동하지 않는지를 설명 할 수 있을까요? –

+0

'JFrame'은 내용 패널로서'JPanel'을 사용합니다. 'JFrame'의 페인트 메소드를 오버 라이딩하는 용도는 없습니다. 실제로 보게되는 것은 프레임의 내용 패널입니다 (앞쪽에 있고이 프레임에 직접 페인팅하려는 모든 것을 숨 깁니다). 그래서 이것은 여러분이 그림을 사용자 정의하고 싶습니다. – Berger

+0

* "JFrame의 paintComponent를 오버라이드하는 것은 유용하지 않습니다"* - 실제로는 불가능합니다. – MadProgrammer

관련 문제