2013-02-05 4 views
1

나는 탭으로 된 창에 이미지를 표시하는 코드를 작성했습니다. 내 코드는 어떻게에 마커를 배치 .. 내가 이미지의 특정 위치에 마커를 배치해야 다음 음이이미지 내에 마커 놓기

class tracker extends JPanel 
    { 
     String imageFile = "areal view.JPG"; 
     public tracker() 
     { 
      super(); 
     } 

     public tracker(String image) 
     { 
      super(); 
       this.imageFile = image; 
     } 
     public tracker(LayoutManager layout) 
      { 
       super(layout); 
      } 
     public void paintComponent(Graphics g) 
      { 
          /*create image icon to get image*/ 
       ImageIcon imageicon = new ImageIcon(getClass().getResource(imageFile)); 
       Image image = imageicon.getImage(); 

          /*Draw image on the panel*/ 
       super.paintComponent(g); 

       if (image != null) 
        g.drawImage(image, 100, 50, 700, 600, this); 
        //g.drawImage(image, 100, 50, getWidth(), getHeight(), this); 
      } 
    } 

같은 lookes ..?

나는 인터넷 검색을 시도했지만 안드로이드와 웹 응용 프로그램에서만 작동한다는 것을 알게되었습니다. 그것은 사실입니까 ??

내가 그것으로 생각하지 않는다 자바처럼 모든 !!!!! ... 내가 BufferedImage 개념-등을 들어 왔지만 그렇게 작동하지 않는다되면

..

이미지 안에 마커를 놓는 것과 관련된 모든 종류의 도움을 환영합니다 ....

+3

'자바는 모든처럼 !!!!! ...'huuuh, 더 나은 도움을 빨리 [SSCCE] (http://sscce.org/), 짧은 실행 가능한 게시

enter image description here , compilable, 읽기 전에 Swing의 Painting에 관한 Oracles 튜토리얼,이 포럼에서 여기를 검색 – mKorbel

답변

4

Graphics에 무언가를 칠할 수도 있습니다.

paint 방법으로 이미지를로드하면 안됩니다.이 경우 이미지가 느려지고 잠재적으로 더 많은 리소스가 소모됩니다. 이미지를 한 번로드하고 참조를 유지하십시오.

class Tracker extends JPanel 
{ 
    String imageFile = "areal view.JPG"; 
    private Image image; 

    public Tracker() 
    { 
     super(); 
     init(); 
    } 

    public Tracker(String image) 
    { 
     super(); 
     this.imageFile = image; 
     init(); 
    } 

    public Tracker(LayoutManager layout) 
    { 
     super(layout); 
     init(); 
    } 

    protected void init() { 
     ImageIcon imageicon = new ImageIcon(getClass().getResource(imageFile)); 
     image = imageicon.getImage(); 
    } 

    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     if (image != null) { 
      g.drawImage(image, 100, 50, 700, 600, this); 
      g.setColor(Color.RED); 
      g.fillOval(290, 215, 20, 20); 
     }     
    } 
} 

나는 당신이 의견에서 추가 예를

Performing Custom Painting2D Graphics

업데이트를 살펴 것이 좋습니다 것, 나는 JLayeredPane를 사용하는 것이 좋습니다 것입니다. 이미지 위에 임의의 위치에 사용자 지정 구성 요소를 배치 할 수 있습니다.

public class Tracker { 

    public static void main(String[] args) { 
     new Tracker(); 
    } 

    public Tracker() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       // 247x178 

       MapPane mapPane = new MapPane(); 
       Marker marker = new Marker(); 
       marker.setToolTipText(
           "<html><table><tr><td valign=top><img src='" + getClass().getResource("/Earth.png") + "'>" + 
           "</td><td valign=top><b>Earth</b><br>Mostly Harmless</td></tr></table></html>" 
           ); 

       marker.setSize(marker.getPreferredSize()); 
       marker.setLocation(237, 188 - marker.getHeight()); 
       mapPane.add(marker); 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(mapPane); 
       frame.setResizable(false); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class Marker extends JLabel { 

     public Marker() { 
      try { 
       setIcon(new ImageIcon(ImageIO.read(getClass().getResource("/Marker.png")))); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 

    } 

    public class MapPane extends JLayeredPane { 

     private BufferedImage map; 

     public MapPane() { 
      try { 
       map = ImageIO.read(getClass().getResource("/SolarSystem.jpg")); 
      } catch (Exception e) { 
      } 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return map == null ? super.getPreferredSize() : new Dimension(map.getWidth(), map.getHeight()); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      if (map != null) { 
       g.drawImage(map, 0, 0, this); 
      } 
     } 

    } 

} 
+0

고맙습니다 만, 그 위치에 타원 (점)을 표시하고 있습니다.이 위치는 정적이며 마우스 포인터가있을 때 어떤 메시지도 표시하지 않습니다. 그 위에 놓입니다. Google지도에서 마커처럼! 어떤 가능성이 있습니까 ???? – ram

+0

* "가능성이 있습니까?"- 많이 있습니다. 나는 당신이 무엇을 성취하려고 노력하고 있는지에 대한 아이디어를 얻는 데 도움이 될 것입니다 ... – MadProgrammer

+0

@ 램 당신은 당신이 원하는 것이 무엇인지 그리고 당신은 문제가 있는지에 관해 당신에게 질문을 명확히해야합니다. 추가 예제를 추가했습니다 – MadProgrammer