이것이 학업 과정이므로 완벽한 해결책이 아니라 오히려 올바른 방향으로 밀고 나가야합니다 (따라서 코드가없는 이유는 무엇입니까?)).ArrayList의 최신 모양을 가져 와서 다른 모양 위에 페인트 - Java
마우스 입력을 처리하는 클래스가 있습니다. 해당 클래스에서 사용자가 모양에 마우스 단추를 누른 상태에서 해당 모양을 활성 모양으로 설정했는지 확인합니다. 사용자가 도형을 드래그하는 동안 도형이 함께 이동하고 이에 따라 위치가 변경됩니다. 마우스를 놓으면 selectedShape가 null로 설정되고 패널이 다시 칠됩니다.
selectedShape가 다른 모든 모양보다 위에 있어야하므로 선택한 모양을 다른 모양 위에 끌면 해당 모양이 infront입니다.
repaint() 메서드는 ArrayList에 표시 될 때 다시 그리기 만하고 다른 메서드를 사용하여 그 모양을 맨 위에 표시해야합니다 (시각적으로 말하면).
어디에서이 기능을 추가 할 수 있습니까? MouseHandler 클래스에서?
클래스는 관련성이 포함 : 은 myShape - 부모 클래스 삼각형, 사각형, 원 - 아이 - 자신의 무승부 (g) 방법 및 setPosition를 MouseHandler는이 - 마우스 이동을하고 각각의 형태를 호출 새로운 위치를 잡아라. MyShapeHandler - 목록에서 도형 추가/제거 패널 - 도형의 인스턴스를 만들고 MyShapeHandler 도움말 메소드 addShape를 사용하여 ArrayList에 추가합니다. drawComponent (g)를 사용하여 ArrayList의 각 도형을 그립니다. 창 - 패널을 추가하는 JFrame
셰이프 개체의 특정 순서가 필요하지 않으면 List 인터페이스에서 제공하는'set (index, object)'를 사용하여 마지막으로 선택한 개체와 마지막 개체를 arraylist에서 바꿀 수 있습니다. MouseReleased 메소드의 MouseHandler에서이를 수행해야합니다. – skubski
셰이프가 겹쳐 지거나 다른 셰이프로 완전히 둘러싸인 모양을 감안할 때 모든 셰이프의 별도 목록 (예 :'JList')을 유지할 수 있습니다. 목록은 '이동할 현재 모양'을 선택할 수 있습니다. 그런 다음 페인팅 할 때 먼저 전체 모양 목록을 그려서 마지막으로 선택한 모양 (두 번째)을 그려서 간단히 그 위에 겹쳐서 표시 할 수 있습니다. –