2013-10-28 4 views
0

아래 프로그램에서 마우스를 클릭 할 때마다 모양의 색상이 변경됩니다. 하지만 마우스를 해당 모양을 클릭하면 색을 변경하고 싶습니다. 위치를 사용하지 않고이를 수행 할 수있는 방법이 있습니까?자바 : 모양을 마우스로 클릭 할 때 모양을 변경하십시오.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Colorchange extends JFrame { 

    public Colorchange() { 
     setTitle("Change Color on click"); 
     setSize(500,500); 
     MyPanel pane=new MyPanel(); 
     add(pane); 
    } 

    public static void main(String[] args) { 
     Colorchange ob=new Colorchange(); 
     ob.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     ob.setVisible(true); 
    } 
} 

class MyPanel extends JPanel { 
    int x=200,y=200,r=50; 
    Color co=Color.RED; 

    public MyPanel() { 
     addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent me) { 
       co=Color.YELLOW; 
       repaint(); 
      } 
     }); 
    } 

    public void paintComponent(Graphics g) { 
     g.setColor(co); 
     g.fillOval(x-r, y-r, 2*r, 2*r); 
    } 
} 
+0

질문은 무엇을 칠 커서의 x, y 위치를 확인? – Christian

+0

마우스를 클릭하면 모양의 색을 변경하고 싶습니다. – rajagopalx

답변

0

직전

//... 
public MyPanel() { 
    addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent me) { 
      if(me.getX() >= (x-r) && me.getX() < (x+r) && me.getY() >= (y-r) && me.getY() < (y+r)) { 
       co=Color.YELLOW; 
       repaint(); 
      } 
     } 
    }); 
} 
//... 
+0

감사합니다. – rajagopalx

+0

걱정하지 마십시오 (그러나 upvoting은 apreciated입니다.)) 또한 Rectangle 클래스를 사용하여 코드를 단순화하고 일반화 할 수 있으며 contains (x, y) – polypiel

+0

메서드는 어제 만 참여합니다. 나는 u를 위해 upvoting하는 것에 15 평판이 없다. – rajagopalx

1

해당 도형의 개체를 만들어야합니다. 개체에 위치를 추가하십시오. OnMouseClick, 마우스 위치가 모양 위치와 같은지 확인하십시오.

행운을 빈다.

+0

고마워요. 나는 시도 할 것이다. 위치를 사용하지 않고 다른 방법이 있습니까? – rajagopalx

+0

내가 아는 한 멀지 않았다. –

+0

@Rajagopal 네,하지만 솔직히 말하면 마우스 클릭 감지 기능을 수행 할뿐만 아니라 모양도 페인트 할 수있는 API가 이미 존재할 때 바퀴벌레를 재발견해야하는 이유는 무엇입니까? – MadProgrammer

관련 문제