2017-05-18 19 views
0

이미지가 JPanel에 표시되는 프로그램을 작성하고 있지만 새 이미지를 열 때 기존 이미지를 바꾸는 데 문제가 있습니다. ImageIcon에서 이전 이미지를 제거하고 새 이미지로 교체하는 쉬운 방법이 있습니까? 나는 다음과 같이 생각했다. mp.remove (pic);이 여기에서 작동하지만 ImageIcon에서는 지원되지 않는다고합니다.JPanel의 현재 이미지를 다른 것으로 대체하십시오.

class MapPanel extends JPanel { 

public MapPanel(String filename) { 
    if(mp == null) { 
    pic = new ImageIcon(filename); 
    int w = pic.getIconWidth(); 
    int h = pic.getIconHeight(); 
    setPreferredSize(new Dimension(w, h)); 
    setMinimumSize(new Dimension(w, h)); 
    setMaximumSize(new Dimension(w, h)); 
    setLayout(null); 
} 
    else { int confirm = 
JOptionPane.showConfirmDialog(MapProgram.this, "Unsaved changes, " + 
"do you really want to open a new map?", 
      "New map", JOptionPane.OK_CANCEL_OPTION); 
      if (confirm != JOptionPane.OK_OPTION) 
       return;  

    // Remove the current image and display the new one choosen 
    // from the JFileChooser. 


    }  
} 
protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(pic.getImage(), 0, 0, this); 
    } 

} 
+3

새로운 이미지를 설정하는 방법은 무엇입니까? – XtremeBaumer

+0

어떻게'그림 (pic) '을 사용하고 있습니까? 당신이 우리에게 보여준 유일한 것은 창조와 할당'pic = new ImageIcon (filename);과 이미지 차원을 얻는 것입니다. – Thomas

+0

죄송합니다. 일부 코드가 어떻게 든 사라졌습니다. 업데이트 된 코드를 참조하십시오. – Andpej

답변

0

왜 ImageIcon을 사용하고 있습니까? ImageIcon을 사용하는 이유가 확실하지 않은 경우 JPanel에서 이미지를 그려야합니다. ImageIO.read()를 사용하여 파일 선택기에서 선택한 파일을 BufferedImage로 읽습니다. 이미지를 멤버 변수로 설정 한 다음 pic.getImage() 대신 paintComponent()에서 멤버 변수를 사용합니다. 파일을 선택하고 멤버 변수를 새 파일 호출 repaint()로 설정 한 후 또는 아무것도하지 않을 수 있습니다 preferredSize가, 최소 크기 및 최대 크기를 설정 또한

https://docs.oracle.com/javase/8/docs/api/javax/imageio/ImageIO.html#read-java.io.File-

. JPanel을 배치 한 컨테이너의 레이아웃 관리자에 따라 다릅니다.

-1

당신이하고 싶은 일에 효과가 있을지 모르지만 시도해보십시오.

g.drawImage(new ImageIcon(filename).getImage(), 0, 0, this); 

또는 이미지를 전달하십시오.