그래서 JLayeredPane (실제로는 JLayeredPane을 실제로 서브 클래 싱하는 클래스)을 가지고 있습니다. 그것에 JPanel입니다. Jpanel에 BufferedImage를 추가하고 싶습니다.JLayerPane의 JPanel에 BufferedImage 추가하기
public class BigMap extends JLayeredPane implements MouseListener
JPanel mapPanel;
BufferedImage theMap;
public BigMap (BufferedImage m){
theMap = m;
mapPanel = new JPanel();
add(mapPanel, 0);
mapPanel.setBounds(0, 0, 640, 640);
//other unimportant stuff
}
@Overrride
public void paintComponent (Graphics g){
super.paintComponent(g);
Graphics2D gmap = (Graphics2D) mapPanel.getGraphics();
gmap.drawImage(theMap, null, 0, 0);
//some other stuff which is working just fine
}
문제점은 BufferedImage가 표시되지 않는 것입니다. JPanel은 backgroundColour를 설정하고 원하는 경우 볼 수 있으므로 확실히 존재합니다. JLayeredPane에 레이아웃 관리자가없고 JPanel의 경계를 설정해야한다는 것을 알았지 만 JPanel 자체의 문제는 아닙니다. BufferedImage가 크기를 직접 제어 할 수있는 방법이 없다는 점을 감안할 때 필자는 그 크기를 어떻게 극복 할 수 있는지 보지 못했습니다.
도움을 주시면 감사하겠습니다.
'mapPanel.getGraphics()'이미 메소드 매개 변수의'Graphics g'을 가지고있는 동안 다른'Graphics' 객체를 얻으려고합니까? 어쨌든 검색 한 그래픽이 유효하지 않은 것 같습니다. 일반적으로, 컴퍼넌트의 getGraphics는 사용하지 말아주세요. –
JLayeredPane에 자신의 이미지가있는 다른 JPanel을 갖기 때문에 간단합니다. 이것은 각자의 내용을 책임지고있는 각 패널의 그래픽을 깔끔하게 유지하려는 시도였습니다. 나쁜 연습? – MrB
_Panel은 자체 컨텐츠에 대한 책임이 있습니다. 나쁜 연습 _ 아니요,하지만 이것은 코드가'paint/paintComponent'를 호출하기 전에 이루어집니다. 그래픽을 돌볼 필요가 없으므로 Swing이 적절한 시간에 적절한 그래픽을 제공합니다. 어떤 Component에 대해서도'getGraphics'를 호출하지 말고 그냥 잘해야합니다. –