在一组JPanel中拖动和移动JPanel

时间:2013-08-23 15:24:30

标签: java swing

有一组10个JPanel放在GridLayout中。现在我想拖动一个JPanel(例如panel1)并将其放在另一个JPanel(例如panel2)上,并将panel2向左或向右移动,并将panel1放在panel2位置。我可以使用拖动选项拖动JPanel,但我无法将其拖放到所需位置。在移动位置移动面板我需要一些帮助。 对不起,如果我的问题不明确。希望你能理解。 提前谢谢。

2 个答案:

答案 0 :(得分: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;
}

然后在 drag 侦听器中,如果 getPanelColliding()不为null,则可以调用它并交换面板位置。我没有测试过这个,但它应该可以工作!

答案 1 :(得分:0)

做了类似的事情,但在SWT Control(s)移动。

我的控件彼此相邻(它们之间没有空格),所以当我放下 control1 时,它会知道哪个 control2 它被删除了(带{ {1}})。

之后,我将control2.getBounds().contains(dropPoint)映射到 control2 ,并找出dropPoint是否位于 control2 的左侧或右侧宽度。然后,我只需使用dropPointmoveAbove(control2)移动 control1

最后,我调用moveBelow(control2)容器是控件的父级)来通知其子项布局已更改,并且子项移动。