2012-05-24 1 views
2

사용자가 JPanel에서 그려지는 선을 마우스 오버 및/또는 마우스 오른쪽 버튼으로 클릭 할 수있는 응용 프로그램이 있습니다. 모든 동작을 처리 할 객체의 일부로 선을 구현할 것으로 기대하지만, 아래 그림에 표시된 선을 구현하는 방법에 대한 근본적인 질문이 있습니다. 첫째, 그림 :Java에서 사용자 정의 가능한 선 클래스를 처리하는 방법

Arrow Between Two Chassis

내가 어떤 문제없이 라인 자체를 그릴 수 있지만, 현재 단지 부모 JPanel에서 오버라이드 (override) paintComponent() 호출에서 수행되고있다. 나는이 문제를 처리하는 방법에 대한 아이디어의 초보 있습니다

public class ChassisLink extends JComponent implements MouseListener 
{ 
    //Rectangle to handle mouse-over and right-click for each segment? 
    public ChassisLink() 
{ 
    initializeLink(); 
} 

private void initializeLink() 
{ 
    //Init stuff 
} 

@Override 
public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
       //Paint the line(s) 
} 
     //MouseListener events... 
//When mouse-over on the line, display a tooltip 
//When right clicking, display a different dialog 
} 

내가 이해하지 못하는 것 같아 문제는 마우스를 두었을하거나 포인트 확인을 클릭하는 방법입니다. 사각형을 사용하고 마우스가 현재 해당 사각형에 포함되어 있는지, 화살표의 삼각형 부분을 무시하는지 여부를 확인합니까? 나는 그것에 대해 매우 낙담합니다. 그런 다음 내 문제는 이러한 링크 개체를 섀시 개체가 포함 된 기존 JPanel 위에 표시하는 방법이됩니다. JLayeredPane에 대한 후보로 들리지만 그 경로에 대한 확인은 무엇입니까?

어쨋거나, 입력하신 사람들이 나에게 줄 수있는 것에 감사드립니다. 다소 모호한 경우 추가 설명을 요청하십시오.

답변

2

부유 한

덕분에, 당신이 바로 그 트랙에 있습니다. Rectangle 대신 Area를 사용하는 것이 좋습니다. 이렇게하면 화살표를 얻을 수 있으며 Area는 AffineTransforms를 사용하여 매우 쉽게 조작 할 수 있습니다.

관련 문제