2017-03-31 12 views
1

이것이 학업 과정이므로 완벽한 해결책이 아니라 오히려 올바른 방향으로 밀고 나가야합니다 (따라서 코드가없는 이유는 무엇입니까?)).ArrayList의 최신 모양을 가져 와서 다른 모양 위에 페인트 - Java

마우스 입력을 처리하는 클래스가 있습니다. 해당 클래스에서 사용자가 모양에 마우스 단추를 누른 상태에서 해당 모양을 활성 모양으로 설정했는지 확인합니다. 사용자가 도형을 드래그하는 동안 도형이 함께 이동하고 이에 따라 위치가 변경됩니다. 마우스를 놓으면 selectedShape가 null로 설정되고 패널이 다시 칠됩니다.

selectedShape가 다른 모든 모양보다 위에 있어야하므로 선택한 모양을 다른 모양 위에 끌면 해당 모양이 infront입니다.

repaint() 메서드는 ArrayList에 표시 될 때 다시 그리기 만하고 다른 메서드를 사용하여 그 모양을 맨 위에 표시해야합니다 (시각적으로 말하면).

어디에서이 기능을 추가 할 수 있습니까? MouseHandler 클래스에서?

클래스는 관련성이 포함 : 은 myShape - 부모 클래스 삼각형, 사각형, 원 - 아이 - 자신의 무승부 (g) 방법 및 setPosition를 MouseHandler는이 - 마우스 이동을하고 각각의 형태를 호출 새로운 위치를 잡아라. MyShapeHandler - 목록에서 도형 추가/제거 패널 - 도형의 인스턴스를 만들고 MyShapeHandler 도움말 메소드 addShape를 사용하여 ArrayList에 추가합니다. drawComponent (g)를 사용하여 ArrayList의 각 도형을 그립니다. - 패널을 추가하는 JFrame

+0

셰이프 개체의 특정 순서가 필요하지 않으면 List 인터페이스에서 제공하는'set (index, object)'를 사용하여 마지막으로 선택한 개체와 마지막 개체를 arraylist에서 바꿀 수 있습니다. MouseReleased 메소드의 MouseHandler에서이를 수행해야합니다. – skubski

+0

셰이프가 겹쳐 지거나 다른 셰이프로 완전히 둘러싸인 모양을 감안할 때 모든 셰이프의 별도 목록 (예 :'JList')을 유지할 수 있습니다. 목록은 '이동할 현재 모양'을 선택할 수 있습니다. 그런 다음 페인팅 할 때 먼저 전체 모양 목록을 그려서 마지막으로 선택한 모양 (두 번째)을 그려서 간단히 그 위에 겹쳐서 표시 할 수 있습니다. –

답변

0

원하는 모양이 첫 번째/마지막이되도록 목록을 다시 정렬 할 수 있습니다. 목록의 도형 인덱스가 화면의 앞면 또는 뒷면의 위치와 일치하는지 실험하고보십시오.

+0

그게 좋은 생각인데, 나는 그 선택된 모양을 마지막으로 바 꾸었습니다. 서로 2 위치를 전환하는 편리한 방법이 ArrayList에 있습니까? –

+0

이제 Collections.swap()을 사용하여 작업 할 수있게되었습니다. (마지막으로 위치 (shapes.set (shape.size() - 1, selectedShape)가 selectedShape로 바뀝니다. 고마워요! 지금은 매력처럼 작동합니다. 여기 새로 왔어요. 대답과 비슷한 투표를 할 때 필요한 것이 있습니까? –

+0

@VitalViper 위대한 답변을 남겨 주시면 저의 평판을 얻을 수 있습니다. -) 또한이 답변을 최고의 답변으로 받아 들일 수 있으므로 더 많은 평판을 얻을 수 있습니다 .-) 여기에 대한 자세한 내용은 http://stackoverflow.com/tour를 참조하십시오. –