2011-11-20 2 views
2

마우스를 클릭 할 때 직사각형 모양을 목표로합니다. 당신은 JPanel에 당신이 원하는 무엇을 정확하게하기 위해 확장 할 수마우스를 클릭 할 때 이미지 위에 모양이 나타나게하려면 어떻게해야합니까?

try{ 
      image = ImageIO.read(file); 
      g.setColor(new Color(255,0,0)); 
      g.drawRect(x, y, 100, 100); 
      } 

    icon = new ImageIcon(image); 
    label = new JLabel(icon); 
    label.addMouseListener(this); 

    public void mouseReleased(MouseEvent event) { 
      // TODO Auto-generated method stub 

      if(event.getSource() == label){ 

       x = event.getX(); 
       y = event.getY(); 

       repaint(); 

       input = JOptionPane.showInputDialog("Something:"); 
       System.out.println(input); 
      } 
     } 
+2

지금까지 무엇을 가지고 계셨습니까? 현재 이미지는 어떻게 그려 집니까? –

+0

내 코드를 게시했습니다. – alicedimarco

+0

글쎄, 당신이 질문의 제목과 본문을 결합하여 요점을 얻을 수있을 것 같아요) – GETah

답변

3

: 가 여기 내 현재 코드의 조각이다

// Declare a field of type MyPanel 
private MyPanel drawingPanel = new MyPanel 
// ... Initialization stuff... 
drawingPanel.setImageToDraw(toDraw,p); 
public void mouseReleased(MouseEvent event) { 
     // TODO Auto-generated method stub 
     if(event.getSource() == label){ 
      // Compute rectangle boundaries 
      drawingPanel.setRectangle(overlayRect); 
     } 
     drawingPanel.repaint(); 
} 
: 마우스 수신기에서

class MyPanel extends JPanel{ 
    //.... 
    private java.awt.Rectangle rectangle = null; 
    private Image imageToDraw; 
    private Point imageLocation; 
    public setImageToDraw(Image toDraw,Point p){ 
     imageToDraw=toDraw; 
     imageLocation = p; 
    } 
    public void setRectangle(java.awt.Rectangle rectangle overlayRect){ 
     rectangle = overlayRect; 
    } 
    // Override paintComponent to draw image and rectangle 
    @Override 
    public void paintComponent(Graphics g) { 
     g.drawImage(imageToDraw,imageLocation.getX(),imageLocation.getY(),this); 
     if(rectangle != null) { 
     // Draw your rectangle here... 
     } 
    } 
} 

을 다음과 같이

기본적으로 MyPanel 개체에는 항상 그려지는 이미지가 있습니다. 이렇게하면 항상 이미지가 패널에 그려집니다. 오버레이 사각형이 필요하면 MyPanel.rectangle 필드를 설정하고 MyPanel 인스턴스를 새로 고침해야합니다. 이렇게하면 이미지가 먼저 다시 그려지고 이미지 위에 오버레이 사각형이 그려집니다.

+0

다른 클래스인가요? 단일 수업에만 참여하고 싶다면 어떻게해야합니까? :) – alicedimarco

+1

아니요, 저는 새로운 수업을 만드는 것이 낫다고 생각합니다. 기본 JPanel은 그 위에 이미지와 직사각형을 그릴 수 없음을 기억하십시오. JPanel의 기능을 확장하고이 모든 비즈니스 로직을 캡슐화해야합니다. 이 방법을 사용하면 멋지고 깨끗한 객체 지향적 인 방식으로 작업을 완료 할 수 있습니다. – GETah

+0

좋아. 나는 또 다른 수업을 만들려고 노력할 것이다 :) 고마워! – alicedimarco

관련 문제