2013-08-23 1 views
1

GridLayout에 배치 된 10 개의 JPanel 그룹이 있습니다. 이제 하나의 JPanel (예 : panel1)을 드래그하여 다른 JPanel (예 : panel2) 위에 배치하고 panel2를 왼쪽 또는 오른쪽으로 이동하고 panel1을 panel2 위치에 배치하려고합니다. 드래그 옵션을 사용하여 JPanel을 드래그 할 수 있지만 필요한 위치에 드롭 할 수 없습니다. 드롭 위치에 패널을 옮길 때 도움이 필요합니다. 죄송합니다. 제 질문이 명확하지 않은 경우. 당신이 이해하기를 바랍니다. 미리 감사드립니다. JPanels 그룹에서 JPanels 드래그 및 이동

+0

드래그 한 패널과 다른 패널 사이의 충돌을 확인한 다음 충돌이 발생할 때 위치를 전환 할 수 있지만이를 수행하는 데 더 좋은 방법이 있습니다. – Fernando

+0

Fernando : 충돌을 확인하는 방법이 있습니까? 아니면 다른 방법이 있습니까? – Rookie86

+0

예, panel.getBounds()는 rectangle.inserects (anotherRectangle)를 호출하는 데 사용할 수있는 * Rectangle * 객체를 반환합니다. – Fernando

답변

0

이 작업을 시도하지만, 내가 말했듯이, 아마 더 좋은 방법이 있었다 : 당신의 드래그 리스너에서 다음

public JPanel getPanelColliding(JPanel dragPanel, JPanel[] panels) 
{ 
    Rectangle rDrag = dragPanel.getBounds(); 

    for (JPanel panel : panels){ 
    if (panel == dragPanel) continue; 

    Rectangle r = panel.getBounds(); 
    if (r.insersects(rDrag)) 
     return r; 
    } 

    return null; 
} 

getPanelColliding은() 않은 경우 당신이 그것을 스왑 패널 위치를 호출 할 수 있습니다 없는. 나는 이것을 테스트하지 않았지만 효과가있다!

+0

감사합니다. Fernando, 시도하고 돌아올 것입니다. – Rookie86

+0

확실히 문제를 해결하기위한 시작이지만, 나는 당신에게 더 좋은 방법이있을 것이라고 동의합니다. – Rookie86

+0

JPanels가 아니라 위치를 바꿔야합니다. 어쩌면 * setLocation() * – Fernando

0

비슷한 것이지만, 주위에 SWT Control(s) 이동하십시오.

내 컨트롤 (그들 사이에 공간이) 서로 옆에 있었다, 그래서 나는 제어 1을 삭제할 때, 그것은하는 control2 그것 (control2.getBounds().contains(dropPoint)로) 감소되는 것을 알고 있습니다.

그 후, 나는 매핑 dropPoint control2에, 그리고 dropPoint 왼쪽 또는 폭control2의 오른쪽에 있는지 찾을 수 있습니다. 그런 다음 컨트롤 1moveAbove(control2) 또는 moveBelow(control2)으로 간단하게 이동합니다.

마지막으로 container.layout() (컨테이너은 컨트롤의 부모입니다)에서 레이아웃이 변경되었다는 것을 자식에게 알리고 자식이 이동한다고 알립니다.