2009-10-08 6 views
0

배경 이미지를 표시하는 Swing을 사용하여 이미지 맵을 만든 다음 마우스가 특정 핫 스폿을 가리키면 (클릭 할 때) '확대 된 이미지'를 팝업하여 표시해야합니다.Java Swing을 사용하여 이미지 맵을 만드는 방법은 무엇입니까?

저는 JPanel을 확장하여 이미지 참조를 포함시키고 paintComponent (g) 메소드를 통해 그린 것으로 생각했습니다.

public class ImagePanel extends JPanel 
{ 
    private static final long serialVersionUID = 1L; 

    private Image image; 

    public ImagePanel(Image image) 
    { 
     setImage(image); 
    } 

    public void setImage(Image newImage) 
    { 
     image = newImage; 
    } 

    @Override 
    public void paintComponent(Graphics g) 
    { 
     Dimension size = getSize(); 
     g.drawImage(image, 0, 0, size.width, size.height, this); 
    } 

사람이 내가/수신 정의 핫스팟을 마우스 클릭에 응답하는 방법을 추천 할 수 없습니다 : 내가 여기까지 수행하고있는이 부분은 코드인가? 다른 사람이 팝업을 표시하는 방법을 추가로 추천 할 수 있습니까? 내 직감 반응은 위의 코드와 비슷한 이미지를 표시하도록 JPopupMenu을 확장하는 것이 었습니다.

도움 주셔서 감사합니다.

답변

2

마우스 클릭을 들으려면 MouseListener 인터페이스를 구현하고이를 패널에 추가하십시오. 그런 다음 클릭이 수신되면 JPopupMenu를 제안대로 사용하거나 유리 창을 사용하여 확대 된 이미지를 표시 할 수도 있습니다.

나는이 post과 비슷한 것을 달성하고 싶습니다. Joshua Marinacci가이 소스 코드를 here에 게시 했으므로 그 점을 살펴 보겠습니다.

+0

차가움, 고마워요! – Cuga

2

아마 것 :

  • 레지스터 A를 (당신은 멋진 모양을 만들어야하는 경우 GeneralPath의를 구 사각형 지루한 일반 될 수있다, 또는 참조)

    • 당신의 핫스팟의 각을 나타내는 형상의 일부 인스턴스를 생성 각 Shapes를 반복하고 contains() 메서드를 호출하여 클릭 한 좌표가 해당 핫 스폿 내에 있는지 확인합니다.
  • +0

    이 작업을하고 싶지만, 언급하지 않은 것은 핫스팟이 이미지에서 임의적 일 수 있다는 것입니다. 따라서이 문제를 해결하기위한 방법은 하위 이미지를 오버레이하는 것일 수 있습니다.하지만이를 수행하고 싶은지 확실하지 않습니다. – Cuga

    관련 문제